2014-01-11 108 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; 
     }; 
}));