如何在关联数组上执行 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
)
如何在关联数组上执行 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
)
尝试使用:
$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);
?>
只需使用$options + $option
!
var_dump($options + $option);
输出:
array(3) {
[1567]=>
string(4) "test"
[1853]=>
string(5) "test1"
["none"]=>
string(3) "N/A"
}
但是当发生键碰撞时要小心。这是PHP手册所说的:
第一个数组中的键将被保留。如果两个数组中都存在一个数组键,则将使用第一个数组中的元素,而忽略第二个数组中匹配键的元素。
$final_option = $option + $options;
我希望将两个关联数组合并在一起,如果键相同,则将值相加。如果任一数组都有唯一的键,则这些键将与其现有值一起添加到合并数组中。
我找不到执行此操作的功能,所以做了这个:
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
此代码可用于递归合并:
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;
}
当array_merge
不起作用时,只需执行
<?php
$new = array();
foreach ($options as $key=>$value) $new[$key] = $value;
foreach ($option as $key=>$value) $new[$key] = $value;
?>
foreach
或根据哪个阵列具有更高优先级切换两个循环
如果数组具有相同的键,则使用array_merge_recursive()
$array1 = array( "a" => "1" , "b" => "45" );
$array2 = array( "a" => "23" , "b" => "33" );
$newarray = array_merge_recursive($array1,$array2);
不会覆盖,它只是将array_merge_recursive()
值作为数组。