コードをコピーします コードは次のとおりです:
$a = '212345678912000005'
$b = '212345678912000001';
var_dump($a == $b);
これの出力コードは bool( true) であり、この判定によって 2 つが等しいと結論付けられることを示します。 in_array() 関数の 3 番目のパラメータが false であるか、設定されていない場合にも同様の機能が発生します。その理由は、文字列が最初に決定されるためです。ただし、ソースコードのコメントには、ステートメントがオーバーフロー状況を考慮していると記載されています。
コードをコピーしてくださいコードは次のとおりです:
} else if (dval1 == dval2 && !zend_finite(dval1)) {
/* 両方の値がオーバーフローしており、同じ符号を持っているため、
* そのため数値比較は不正確になります */
goto string_cmp;
dval1 と dval2 は double 型の後の値に変換されますが、なぜこの判断が正しくないのでしょうか?
解決策は、3 つの等しい値を使用します。 2 つの等号「==」の代わりに「===」を符号付けします。 in_array() 関数は、3 番目のパラメータを true に設定します: in_array('val', $array, true)。
http://www.bkjia.com/PHPjc/320772.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/320772.html技術記事次のようにコードをコピーします: $a = '212345678912000001'; このコードの出力は bool(true) であり、この判断は次のようになります。両方見てください...
🎜