2013-02-19 37 views
0

我有一個關於嵌套數組的問題;我搜索谷歌和計算器,但無法找到一個適合我的需求的解決方案: -/從平面數組中使用兒童創建一個嵌套數組

我有以下陣列:

Array 
(
    [0] => Array 
     (
      [name] => Europe 
      [children] => Array 
       (
        [0] => West 
        [1] => East 
        [2] => South 
        [3] => North 
        [4] => Zimbabwe 
       ) 
     ) 
    [1] => Array 
     (
      [name] => West 
      [children] => Array 
       (
        [0] => Germany 
        [1] => France 
        [2] => Switzerland 
        [3] => Netherlands 
        [4] => Belgium 
        [5] => Luxembourg 
        [6] => United Kingdom 
        [7] => Ireland 
       ) 
     ) 
    [2] => Array 
     (
      [name] => Germany 
      [children] => 
     ) 
    [3] => Array 
     (
      [name] => France 
      [children] => 
     ) 
) 

我想改變它有它嵌套的,即:

Array 
(
    [0] => Array 
     (
      [name] => Europe 
      [children] => Array 
       (
        [0] => Array 
      (
       [name] => West 
       [children] => Array 
       (
        [0]=> Array 
        (
        [name] => Germany 
       ) 
        [1]=> Array 
        (
        [name] => France 
       ) 
       ) 
      ) 
        [2] => Array 
      (
       [name] => East 
       [children] => Array 
       (
        [0]=> Array 
        (
        [name] => Poland 
       ) 
        [1]=> Array 
        (
        [name] => Austria 
       ) 
       ) 
      ) 
     ) 
     ) 
) 

你有什麼想法嗎?

在此先感謝!

+0

[你有什麼嘗試?](http://whathaveyoutried.com) – 2013-02-19 14:55:37

+0

你可以在循環內部使用循環,直到你到達你需要修改數組的地方。 – Aborted 2013-02-19 15:05:00

+0

你好晶圓廠,其實我還沒有嘗試過任何東西。說實話,我不知道如何開始......這是一個遞歸函數嗎? – laloune 2013-02-19 15:05:40

回答

0
foreach ($unnested_ary as $one_k => $one_v) 
{ 
    foreach ($one_v as $two_k => $two_v) 
    { 
     if ($two_k == 'children') 
     { 
      foreach ($two_v as $three_k => $three_v) 
      { 
       $unnested_array[$one_k][$two_k][$three_k][] = array(array(
        'name' => $three_v 
       )); 
      } 
     } 
    } 
} 

我不知道我是否正確嵌套它,但你應該明白這一點,並玩弄這段代碼。這應該基本上創造像你問的新的鍵和值。

+0

你好Dugi,謝謝你的回覆。其實我以爲我應該使用遞歸函數,因爲我事先並不知道我將擁有的關卡數量。我的數組只是一個例子。我嘗試了以下,但它不能正常工作:function buildTree($ inputarray) { \t $ arrayout = array(); \t的foreach($ inputarray爲$ arrayelt) \t { \t如果(is_array($ arrayelt [ '孩子'])) \t { \t $ arrayout [ '名稱'] = $ inputarray [ '名稱']; \t buildTree($ inputarray ['children']); \t} \t別的 \t { \t $ arrayout [ '名稱'] = $ inputarray [ '名稱']; \t} \t} \t \t return $ arrayout; } – laloune 2013-02-19 16:00:02