このコードの何が間違っているのか分かりません。「Found」が返されますが、返されるべきではありません。
$lead = "418176000000069007";
$diff = array("418176000000069003","418176000000057001");
if (in_array($lead,$diff))
echo "Found";
else
echo "Not found";
ベストアンサー1
注記:この動作は PHP 5.4 で変更されました。
デフォルトでは、in_array
緩い比較 ( ==
) を使用します。つまり、数値文字列は数値に変換され、数値として比較されます。PHP 5.4 より前では、プラットフォームの浮動小数点型の精度が十分でない場合、違いが失われ、間違った答えが得られました。
解決策としては、に追加のパラメータを渡してstrict
比較 ( ) をオンにすることです。===
Boolean
in_array
$lead = "418176000000069007";
$diff = array("418176000000069003", "418176000000057001");
if ( in_array($lead, $diff, true) )
echo "Found";
else
echo "Not found";
次に、文字列は数値の強制変換のない文字列として比較されます。ただし、これは、「01234」と「1234」のような文字列のデフォルトの等価性が失われることを意味します。
この行動バグとして報告されたPHP 5.4 で修正されました。数値文字列は、と比較すると数値に変換されます==
が、文字列の値がプラットフォームの数値型に適合する場合のみです。