我正在尝试以递归方式合并两个数组,同时遵循一些简单的规则: 1)仅从第二个数组中获取第一个数组中存在的键,其值不是另一个数组。 2)第一个数组中第二个数组中没有匹配键的键应该设置为零。
数组1
Array
(
[a_arr] => Array
(
[u1] => Array
(
[v] =>
[a] =>
[e] =>
[d] =>
)
[u2] => Array
(
[v] =>
[a] =>
[e] =>
[d] =>
)
)
[b_arr] => Array
(
)
)
数组2:
Array
(
[a_arr] => Array
(
[u1] => Array
(
[a] => 1
[e] => 1
)
[u2] => Array
(
[v] => 1
)
[u3] => Array
(
[e] => 1
)
)
[b_arr] => Array
(
)
)
合并后的预期输出数组:
Array
(
[a_arr] => Array
(
[u1] => Array
(
[v] => 0
[a] => 1
[e] => 1
[d] => 0
)
[u2] => Array
(
[v] => 1
[a] => 0
[e] => 0
[d] => 0
)
)
[b_arr] => Array
(
)
)
我写的这个函数是:
private function mergeArrayRecursive(&$arr1,&$arr2){
foreach($arr1 AS $k=>$v){
if(is_array($v)){
if(isset($arr2[$k])){
$this->mergeArrayRecursive($v,$arr2[$k]);
}
}
else if(isset($arr2[$k])){
$arr1[$k] = $arr2[$k];
}
else{
$arr1[$k] = 0;
}
}
}
但它似乎不起作用,阵列似乎仍未受影响。我做错了什么?
答案 0 :(得分:0)
您可以尝试使用以下方法:
private function mergeArrayRecursive($arr1, $arr2){
foreach ($arr1 as $k => $v) {
if (is_array($v) && isset($arr2[$k])) {
$arr1[$k] = $this->mergeArrayRecursive($v, $arr2[$k]);
} else if (isset($arr2[$k])) {
$arr1[$k] = $arr2[$k];
}
}
return $arr1;
}
改变了什么?没有最后else
声明,您忘记了return
。 params也没有&
参考。