1

私は次の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は等しい値をダンプし、最初の配列とは異なる値のみを許可する必要があります。ここで何が問題になっているようですか?私はWindows7でWampServerバージョン2.2を実行しています。PHPバージョン:5.3.9。

4

2 に答える 2

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/-が必要です

于 2012-07-10T09:53:24.280 に答える
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);
于 2012-07-10T09:52:54.420 に答える