php array_udiff函数使用

621 查看

array_udiff,在php的官网文档里是这么解释的
(PHP 5)
array_udiff — 用回调函数比较数据来计算数组的差集

说明

array array_udiff ( array $array1 , array $array2 [, array $ ... ], callable $data_compare_func )

array_udiff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保持不变。数据的比较是用 data_compare_func 进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。这和 array_diff() 不同,后者使用了内部函数来比较数据。

个人认为这个解释很模糊,第三个参数或者说匿名函数参数返回的结果会对整个函数返回的结果有什么影响?
在查过资料后做个总结:
所有的数组参数会进行比较, 比如$array1, $array2两个数组比较,筛选出位于$array1而不属于$array2中数组元素, 如果第三个参数返回的结果是0或者-1,那么返回的结果里就不会包含位于第一个数组中的元素,如果返回的是1, 则会包含位于第一个数组中的元素。
例:

$arr1 = array('cat','mouse','horse');
$arr2 = array('cat','mouse');
print_r(array_udiff($arr1,$arr2,function($a, $b){return 0;}));

此时返回的结果就会是array(),空数组,假如return 1,那么返回的就是array('cat','mouse','horse')

$arr1 = array('cat','mouse','horse');
$arr2 = array('cat','mouse');
print_r(array_udiff($arr1,$arr2,function($a, $b){return ($a==$b)?0:1;}));

这个时候就只会在两个数组不同的时候输出$arr1中的元素,这就达到了从数组$arr1中剔除与$arr2中相同的元素