我有以下Php脚本:
<?php
function filt($k, $l){
if($k===$l){
var_dump("valid: ".$k."-".$l);
return 0;
}
return 1;
}
$a6=array(7, 9, 3, 33);
$a7=array(2, 9, 3, 33);
$u=array_udiff($a6, $a7, "filt");
var_dump($u);
?>
使用以下输出:
string 'valid: 3-3' (length=10)
array
0 => int 7
1 => int 9
3 => int 33
据我所知,array_udiff应该转储相等的值,只允许第一个数组中的不同值。 这里似乎有什么问题? 我在Windows 7上运行WampServer 2.2版.Php版本:5.3.9。
答案 0 :(得分:4)
请注意文档说:
The comparison function must return an integer less than, equal to, or
greater than zero if the first argument is considered to be respectively
less than, equal to, or greater than the second.
你不是那样做的。为确保您这样做,只需让filt
函数返回$l - $k
有一个简单的解释:元素可能是任何顺序。为了避免必须将每个元素与每个其他元素进行比较,它首先对它们进行排序。这就是你需要+ / 0 / -
的原因答案 1 :(得分:3)
你没有返回所有必要的值(例如-1,0,1)。请参阅:array_udiff
$a6 = array(7, 9, 3, 33);
$a7 = array(2, 9, 3, 33);
$u = array_udiff($a6, $a7, function ($k, $l){
return $k > $l ? 1 : ($k < $l ? -1 : 0);
});
print_r($u);