在PHP中的关联数组上进行数组合并

时间:2011-07-25 09:11:33

标签: php array-merge

如何在关联数组上执行array_merge,如下所示:

数组1:

$options = array (
"1567" => "test",
"1853" => "test1",
);

数组2:

$option = array (
"none" => "N/A"
);

所以我需要array_merge这两个但是当我这样做时(在调试中):

Array
(
    [none] => N/A
    [0] => test
    [1] => test1
)

7 个答案:

答案 0 :(得分:12)

尝试使用:

$ finalArray = $ options + $ option .see http://codepad.org/BJ0HVtac 只检查重复键的行为,我没有测试这个。对于独特的键,效果很好。

<?php

$options = array (
                  "1567" => "test",
                  "1853" => "test1",
                  );


$option = array (
"none" => "N/A"
);


$final = array_merge($option,$options);

var_dump($final);


$finalNew = $option + $options ;

var_dump($finalNew);

?>

答案 1 :(得分:12)

只需使用$options + $option

var_dump($options + $option);

输出:

array(3) {
  [1567]=>
  string(4) "test"
  [1853]=>
  string(5) "test1"
  ["none"]=>
  string(3) "N/A"
}

但是在发生钥匙碰撞时要小心。以下是PHP manual所说的内容:

将保留第一个数组中的键。 如果两个数组中都存在数组键,则将使用第一个数组中的元素,并忽略第二个数组中匹配键的元素。

答案 2 :(得分:1)

  

我希望将两个关联数组合并在一起,如果键是相同的,则将值相加。如果有任何一个数组唯一的键,这些键将与现有值一起添加到合并数组中。

     

我找不到这样做的功能,所以做了这个:

function array_merge_assoc($array1, $array2)
{

    if(sizeof($array1)>sizeof($array2))
    {
        echo $size = sizeof($array1);
    }
    else
    {
        $a = $array1;
        $array1 = $array2;
        $array2 = $a;

        echo $size = sizeof($array1);
    }

    $keys2 = array_keys($array2);

    for($i = 0;$i<$size;$i++)
    {
        $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]];
    }

    $array1 = array_filter($array1);
    return $array1;
 }

参考:http://www.php.net/manual/en/function.array-merge.php#90136

答案 3 :(得分:1)

$final_option = $option + $options;

答案 4 :(得分:0)

array_merge不起作用时,只需执行

<?php
$new = array();
foreach ($options as $key=>$value) $new[$key] = $value;
foreach ($option as $key=>$value) $new[$key] = $value;
?>

或切换两个foreach循环,具体取决于哪个数组具有更高的优先级

答案 5 :(得分:0)

此代码可用于递归合并:

function merge($arr1, $arr2){
        $out = array();
        foreach($arr1 as $key => $val1){
            if(isset($arr2[$key])){
                if(is_array($arr1[$key]) && is_array($arr2[$key])){
                    $out[$key]=  merge($arr1[$key], $arr2[$key]);
                }else{
                    $out[$key]= array($arr1[$key], $arr2[$key]);
                }
                unset($arr2[$key]);
            }else{
                $out[$key] = $arr1[$key];
            }
        }
        return $out + $arr2;
 }

答案 6 :(得分:0)

如果具有相同键的数组,则使用array_merge_recursive()

$array1 = array( "a" => "1" , "b" => "45" );

$array2 = array( "a" => "23" , "b" => "33" );

$newarray = array_merge_recursive($array1,$array2);

array_merge_recursive()不会覆盖,它只是将值作为数组。