在php中组合两个(或更多...)多维数组

时间:2010-02-02 15:05:27

标签: php arrays

我有一个查询,我用不同的参数运行了几次。我正在使用xml解析器将结果返回给jQuery。

我似乎无法找到在第一个“节点”上合并结果而不覆盖第一个条目的方法。

简化代码示例:

$temp1 = returnArray(0);

$temp2 = returnArray(1);

$data = array_merge($temp1, $temp2);

print_r($data);

function returnArray($switch)
{
    if($switch == 0)
    {
        $data['data']['first'] = "something";
    } else {
        $data['data']['second'] = "something ELSE";
    }
    return $data;
}

导致打印Array ( [data] => Array ( [second] => something ELSE ) ) - $ temp2覆盖$ temp1。我理解这是array_merge()的默认行为,这让我很困惑。

我也尝试过像$data = $temp1+$temp2;或......

这样的事情
$data = returnArray(0);

$data += returnArray(1);

打印Array ( [data] => Array ( [first] => something ) )

...或

$data = returnArray(0);

$data .= returnArray(1);
print_r($data);

打印ArrayArray

我最后一起黑客攻击:

$data['data'] = returnArray(0);
$data['data'] = returnArray(1);

function returnArray($switch){
  if($switch == 0) return Array('first' => 'something');
  else return Array('second' => 'something else');
}

我对此并不满意......尽管在这种情况下完成了工作,但在将来发生更复杂的情况时,它将不再适用。

有没有更好的方法来获取两个关联的多维数组并将它们组合而不会覆盖?

编辑:

我希望该方法可重用,可扩展,并且能够处理2个以上维度的2个数组。

1 个答案:

答案 0 :(得分:3)

PHP实际上提供了一个名为array_merge_recursive()的函数,它正好用于这种类型的场景。来自documentation page

  

array_merge_recursive() 合并了   一个或多个数组的元素   在一起,以便一个人的价值观   附加到上一个结尾   一。它返回结果数组。

     

如果输入数组相同   字符串键,然后是这些值   密钥合并为一个   数组,这是递归完成的,   所以,如果其中一个值是   数组本身,该函数将合并   它带有相应的条目   另一个阵列也是。但是,如果   数组具有相同的数字键   以后的值不会覆盖   原始值,但将被追加。

示例:

<?php
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
?>

<强>输出:

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )

            [0] => blue
        )

    [0] => 5
    [1] => 10
)