PHP递归数组副本

时间:2012-04-05 20:45:56

标签: php arrays recursion multidimensional-array

我有一个多维数组数组(下面的源代码),其中我的键和值是任意字符串。我想创建一个新的数组(在下面需要),其中层次结构保持不变,但每个KEY都重构为自己的数组,键本身成为'title'值,任何子数组都在'children'下继续。

如何使用带有& $ 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)
        )
    )
)

注意:我不关心新数组中的最终节点/叶子。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我已经对数组进行了递归编程。

$a = array(
    'Alpha' => array('Red' => 'one', 'Blue' => 'two'),
    'Bravo' => array('Blue' => 'three'));


function copyarray($datas){
    $arr = array();

            if(is_array($datas)){
                foreach($datas as $key => $val){
                    if(is_array($val)){
                    $arr[$key] = copyarray($val);
                    }else
                    $arr[$key]=$val;
                }
            }
            return $arr;
}

echo "<pre>";print_r(copyarray($a));