13

如何在关联数组上执行 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
)
4

7 回答 7

14

尝试使用:

$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);

?>
于 2011-07-25T09:17:04.047 回答
12

只需使用$options + $option

var_dump($options + $option);

输出:

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

但是当发生键碰撞时要小心。这是PHP手册所说的:

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

于 2011-07-25T09:22:41.277 回答
2
$final_option = $option + $options;
于 2011-07-25T09:24:37.653 回答
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

于 2011-07-25T09:15:19.453 回答
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;
 }
于 2013-12-10T08:04:05.503 回答
0

array_merge不起作用时,只需执行

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

foreach或根据哪个阵列具有更高优先级切换两个循环

于 2011-07-25T09:14:24.007 回答
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()值作为数组。

于 2016-10-11T15:23:36.200 回答