2014-01-11 64 views
2
$a = array(1,2,3,4,5); 
$b = array(1,6,3,4,5); 
echo "<pre>"; 
print_r(array_udiff($a,$b,function($a,$b){ 
    return ($a === $b)? 0:1; 
})); 

用作说明书上说: 它应该返回一个包含不存在任何的其他参数的阵列1的所有值的数组。 如果只有两个数组进行比较,我认为它会像array_diff()
我希望它可以返回:我很困惑的问题,如何array_udiff

Array 
(
    [0] => 2 
) 

但是它返回:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [4] => 5 
) 
+1

我不知道,但也许它使用比较函数超越“等于”或“不等于”的返回值,它实际上考虑的东西是否是“高”或“低”。你有没有正确地返回'<0','0'或'> 0'? – deceze

+0

@deceze谢谢,因为我这样做,因为我从书中得到它。所以书的内容不能完全相信 – ZhouMengkang

回答

2

对于array_udiff()的value_compare_func参数,“比较函数必须返回小于一个整数,等于或大于如果第一个参数被认为分别小于,等于或大于第二个参数,则为零“。

http://us1.php.net/manual/en/function.array-udiff.php

这解决了这个问题,并返回的2项目阵列。

$a = array(1,2,3,4,5); 
$b = array(1,6,3,4,5); 
echo "<pre>"; 

print_r(array_udiff($a,$b,function($a,$b){ 
    if ($a < $b) { 
      return -1; 
     } elseif ($a > $b) { 
      return 1; 
     } else { 
      return 0; 
     }; 
}));