2014-01-14 89 views
0

過去幾天我一直困惑以下,似乎無法提出一個優雅的解決方案。PHP:通過鍵連接嵌套子陣列的值

我有一個這樣的陣列,其中每個子陣列具有其通過散列符號,並且每個(子)前綴鍵陣列具有變化窩深度:

Array(
    [#a1] => Array(
      [key1] => a1-1 
      [key2] => a1-2 
      [#b1] => Array(
        [key1] => b1-1 
        [key2] => b1-2 
       ) 
      [#b2] => Array(
        [key1] => b2-1 
        [key2] => b2-2 
        [#c1] => Array(
          [key1] => c1-1 
          [key2] => c1-2 
         ) 
        [#c2] => Array(
          [key1] => c2-1 
          [key2] => c2-2 
         ) 
       ) 
     ) 
    [#a2] => Array(...) 
) 

我需要一些方法來走在每個可能的嵌套路由(例如#a1 - #b2 - #c1以及#a1 - #b2 - #c2)並且在特定於該路由的數組中的路由期間合併相等的鍵。結果數組的鍵並不重要。

事情是這樣的:

Array(

    // Follow path #a1 #b1 
    [] = Array(
      [key1] = Array(a1-1, b1-1) 
      [key2] = Array(a1-2, b1-2) 
     ) 

    // Follow path #a1 #b2 #c1 
    [] = Array( 
      [key1] = Array(a1-1, b2-1, c1-1) 
      [key2] = Array(a1-2, b2-2, c1-2) 
     ) 

    // Follow path #a1 #b2 #c2 
    [] = Array( 
      [key1] = Array(a1-1, b2-1, c2-1) 
      [key2] = Array(a1-2, b2-2, c2-2) 
     ) 

    // Follow path #a2 ... 
    [] = Array(...) 

    ) 
) 

我一直在思考array_merge_recursivearray_walk_recursiverecursive foreaches但不能把它們放在一起的東西,實際工作......

任何幫助是極大的讚賞!謝謝!

回答

0

嘗試使用usort()(http://php.net/manual/en/function.usort.php),例如:

function compare_id($a, $b) { 
    if ($a['id'] == $b['id']) return 0; 
    return ($a['id'] < $b['id']) ? -1 : 1; 
} 

$a = [ 
    ['id' => 3, 'item' => 'pc'], 
    ['id' => 1, 'item' => 'mouse'], 
    ['id' => 2, 'item' => 'kb'], 
]; 

usort($a, 'compare_id'); 

var_dump($a); 
+0

我不知道如何將產生所要求的輸出? – Propaganistas