2017-04-05 11 views
0

私は疑問なぜ「未満の整数を返さなければならない、と等しい、または最初の引数は、第二よりそれぞれ未満に等しい、またはそれ以上であると考えられる場合は、ゼロより大きい」array_uintersect_assocの比較関数(http://php.net/manual/en/function.array-uintersect-assoc.php)。私は2つの配列を比較するときに、私はブール値が必要です:要素は一致するか、どちらもありません。array_uintersect_assocが非ブール戻り値との比較関数を必要とするのはなぜですか?

この現象が発生する実際の理由は何ですか?

答えて

0

このような関数は、このような戻り戦略を使用する「古典的な」比較関数を使用できるように実装されています。このような関数は、明らかにブール値の戻り値では不可能な 3つの場合を表すことができる必要があります。

しかし、がブール値の結果を返す比較関数を使用することもできます。これは、弱い型指定言語としてのPHPが自動的に変換するためです。機能のマニュアルの1のわずかmodifedバージョンであることを例に見てみましょう:

<?php 
function mystrcasecmp($a, $b) { 
    return strcasecmp($a, $b) ? true : false; 
} 

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); 
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red"); 

print_r(array_uintersect_assoc($array1, $array2, "mystrcasecmp")); 

あなたがここで使用される比較関数はブール値を返し、まだ結果はまったく同じであることがわかります。

ボトムライン:既存の実装は、あまりにも、ブール結果を返す比較関数の使用を可能にしながら、より柔軟です。

関連する問題