使用 array_merge_recursive 将数组合并在一起,但只对添加到数组中的新内容执行操作


using array_merge_recursive to merge arrays together but then only doing stuff with the new contents added to the array?

如果您发现标题具有误导性,请抱歉。我真的想不出这个问题的好标题。

有两个数组,我将它们合并到一个函数中:

$arr1['something']['secondary_something'][]="foo1";
$arr1['something']['secondary_something'][]="foo2";
$arr1['something']['secondary_something'][]="foo3";
$arr2['something']['secondary_something'][]="foo4";
$arr2['something']['secondary_something'][]="foo5";
function something($array_, $array_new) {
$array=array_merge_recursive($array_,$array_new); // to combine/merge both arrays
print_r($array);//debugg
}

现在该函数只是打印这个(这很好):

Array ( [something] => Array ( [secondary_something] => Array ( [0] => foo1 [1] => foo2 [2] => foo3 [3] => foo4 [4] => foo5 ) ) )

但是我需要处理已合并到主数组的新数据。所以我需要$arr2工作,但只有在它与$arr1合并后。

当我说我需要"处理新数据"时,var_export()是我需要对数组做的事情之一。

如果我只是做一个echo var_export($array_new,true);,我得到这个:

array ( 'something' => array ( 'secondary_something' => array ( 0 => 'foo4', 1 => 'foo5', ), ), )

当我需要这个时:

array ( 'something' => array ( 'secondary_something' => array ( 3 => 'foo4', 4 => 'foo5', ), ), )

^^ 请注意数组键是 3 和 4,而不是 1 和 2。因为它已经与主阵列($arr1)合并。

希望你们明白我想做什么。

有什么想法吗?

谢谢 xD

echo var_export(array_intersect($array['something']['secondary_something'], $arr2['something']['secondary_something']), true);

编辑 这有效,但您丢失了数组的多维方面。如果要保留var_export中的somethingsecondary_something方面,则需要编写递归函数来单步执行整个数组