array_intersect()的反转

时间:2011-12-04 19:10:51

标签: php arrays

参数是这样的:

function foo(arr1, arr2, arr3, arr4 ...)

并且该函数应返回arr2,arr3,arr4中所有元素的数组,这些元素在arr1中不存在。

这是否有内置功能?或者我是否需要自己制作foreach和stuff? :)

3 个答案:

答案 0 :(得分:10)

没有内置功能可以完全满足您的要求。 array_diff()很接近,但并不完全。所以你必须推出自己漂亮的整洁功能,或者做一些丑陋的事情:

array_diff( array_unique(
                array_merge(
                    array_values($arr2), 
                    array_values($arr3), 
                    array_values($arr4)
                )),
                $arr1 
           );

如果您希望在数组中多次出现的值也会在结果中多次显示,则可以删除对array_unique()的调用。

如果数组中的键都是数字键,或者如果您确定没有非数字键出现在多个要合并的数组中,则可以删除对array_values()的调用。

因此,在那些理想的情况下,它可以简化为:

array_diff( array_merge( $arr2, $arr3, $arr4 ), $arr1 );

答案 1 :(得分:5)

您可以使用array_diff执行此操作,但您必须稍微改变一下。

$result = array_diff (array_merge ($arr2, $arr3, $arr4), $arr1);

编辑:特洛特的答案涵盖了我的一些边缘案例。这可能是你将获得的最佳解决方案。

答案 2 :(得分:1)