array_uintersect (array1,array2,function)方法应返回2个数组的交集,但它在我的代码中无法正常工作。
代码:
function myComparator($a,$b){
if ($a==$b){
echo "$a == $b".PHP_EOL;
return 0;
}
echo "$a != $b".PHP_EOL;
return -1;
}
$array1 = array('A','B','C');
$array2 = array('1','2','A');
$array3 = array_uintersect($array1,$array2,"myComparator");
foreach ($array3 as $key => $value) {
echo "$key : $value".PHP_EOL;
}
?>
控制台打印:
A != B
B != C
1 != 2
2 != A
A != 1
B != 1
C != 1
[Finished in 0.2s]
通常, $ array3 应该包含元素“A”,但实际上是一个空数组。 这是一个错误还是我错误地理解了这个方法?
PHP版本:7.0.10
提前谢谢你:)
答案 0 :(得分:2)
因为你的比较器只返回0或-1,而它也应该返回值1(否则array_uintersect会认为数组已排序,即使它们不是这样)。
将比较更改为:
if ($a==$b) {
return 0;
} else if ($a > $b) {
return 1;
} else {
return -1;
}