2012-04-05 112 views
0

我有一个数组的多维数组(source below),其中我的键和值是任意字符串。我想创建一个新的数组(下面需要),其中层次结构保持不变,但是每个KEY都重新构建到自己的数组中,并且该关键字本身成为“标题”值,并且任何子数组都在“子”之下继续。PHP递归阵列副本

我该如何使用递归函数完成此操作,该函数需要& $ source和& $目标数组,并相应地填充目标数组?

源阵列:

Array (
    [Alpha] => Array (
     [Red] => one 
     [Blue] => two 
    ) 
    [Bravo] => Array (
     [Blue] => three 
    ) 
) 

期望的数组:

Array (
    [0] => Array (
     [title] => Alpha 
     [children] => Array (
        [0] Array([title] => Red, [children]= > false) 
        [1] Array([title] => Blue, [children]= > false) 
     ) 
    ) 
    [1] => Array (
     [title] => Bravo 
        [0] Array([title] => Blue, [children]= > false) 
     ) 
    ) 
) 

注:我不关心我的新阵列的最终节点/叶子。

回答

3

您可以在不传递对目标数组的引用的情况下进行转换。

function convert_array($from){ 
    if(!is_array($from)){ 
     return false; 
    } 
    $to = array(); 
    foreach($from as $k=>$v){ 
     $to[] = array(
      'title' => $k, 
      'children' => convert_array($v) 
     ); 
    } 
    return $to; 
} 

Codepad example

+0

感谢,工程巨大。顺便说一句,使用$ to []与仅使用$ to的foreach有什么关系?只有$ to []似乎可以工作,但$ to仍然是语法明智的。 – lioman 2012-04-05 21:08:25

+1

使用'$ to []'你正在向数组追加一个元素(与使用'array_push'相同),使用'$ to'你每次覆盖数组。 – 2012-04-05 21:20:56