如何在关联数组上执行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
)
答案 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()
不会覆盖,它只是将值作为数组。