array_udiff应该如何使用?与逻辑预期结果相比,以下测试的结果似乎有点奇怪。
$a1 = array('red');
$a2 = array('red', 'blue');
$diff = array_udiff($a1, $a2,
function($a, $b) {
if($a === $b) {
return 0;
}
else {
return -1;
}
});
var_dump($diff);
以上输出:
array (size=1)
0 => string 'red' (length=3)
为什么?
为了更好地显示问题,这里是内部array_diff的输出:
$internalDiff = array_diff($a1, $a2);
var_dump($internalDiff);
输出:
array (size=0)
empty
什么??? !!! (:))。第二个输出似乎是逻辑,但为什么array_udiff没有给出相同的输出?
答案 0 :(得分:0)
输出是正确的,如果您查看手册,了解原因及其工作原理:http://php.net/manual/en/function.array-udiff.php
从那里引用:
如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。
答案 1 :(得分:0)
一年后......但是对于array_udiff,我认为PHP会认为如果一个> b和b> c,a!= c,所以它就像a!= c一样,即使是& c等于。 使用array_udiff,你真的必须听PHP文档,并根据情况返回-1和1,而不是-1或1,当它不是egal时,否则它不会像你期望的那样工作它起作用。
我发现这篇文章是因为我有同样的问题,和Geo C一样,我也不明白为什么我的array_udiff返回了公共元素。当两个条目不相等时,我总是返回-1(然后我尝试1),现在我检查更大或更小,它工作正常!
当你考虑它时,PHP尝试以这种方式赢得时间是合乎逻辑的!