2014-02-26 57 views
0

我已經在一個層次結構如下陣列上 - 它基本上是在「孩子」類別和其子數組鍵:子節點移動到根級別的層次結構陣列

Array 
    (
     [category_id] => 1 
     [parent_id] => 0 
     [name] => Commercial 
     [child] => Array 
      (
       [0] => Array 
        (
         [category_id] => 48 
         [parent_id] => 1 
         [name] => lights 
         [child] => Array 
          (
          ) 
        ) 

       [1] => Array 
        (
         [category_id] => 12 
         [parent_id] => 1 
         [name] => beacons 
         [child] => Array 
          (
           [0] => Array 
            (
             [category_id] => 91 
             [parent_id] => 12 
             [name] => blue beacons 
             [child] => Array 
              (
              ) 

            ) 
          ) 

        ) 
      ) 
    ) 

我是什麼試圖做的是寫一個遞歸函數來將這個數組重新組織爲一個ONE LEVEL數組。我不希望它的子節點在「子」鍵中,而是希望它成爲數組根級別的一部分。像這樣:

[0] => Array 
    (
     [category_id] => 1 
     [parent_id] => 0 
     [name] => Commercial 
    ) 

[1] => Array 
    (
     [category_id] => 48 
     [parent_id] => 1 
     [name] => lights 
    ) 

[2] => Array 
    (
     [category_id] => 12 
     [parent_id] => 1 
     [name] => beacons 
    ) 


[3] => Array 
    (
     [category_id] => 91 
     [parent_id] => 12 
     [name] => blue beacons 
    ) 

任何想法?

謝謝!

+0

許多實際。你爲什麼不寫一個重組數組的遞歸函數?儘管如此,我們並沒有爲你寫代碼。當你[通過引用將結果數組傳遞](http://php.net/manual/en/language.references.pass.php)到函數中時,可以逐個添加所有元素,例如。 – kero

回答

1

下面的遞歸函數應該成爲你的目的:

function one_level_array($arr){ 
$ret = array(); 
$ret[] = array_diff_key($arr, array("child" => "")); 
    if(array_key_exists("child", $arr)){ 
     foreach($arr["child"] as $child){ 
     $ret = array_merge($ret, one_level_array($child)); 
     } 
    } 
return $ret; 
} 

DEMO

+0

謝謝Sharanya,那很完美。對於我的具體情況,我會稍微改變一下,但這是我一直在尋找的想法。 –

+0

不客氣。 –

相關問題