ホームページ >バックエンド開発 >PHPチュートリアル >PHP で存在しない値に対して「in_array()」が True を返すのはなぜですか?
TRUTH を使用した配列内の特異な動作
PHP の in_array() 関数は、ブール値 TRUE を含む配列を操作するときに予期しない動作を示します。
次のことを考えてみましょうarray:
$arr = [TRUE, "some string", "something else"];
驚くべきことに、"test" が配列内にないにもかかわらず、in_array("test", $arr) は true を返します。 array_search("test", $arr) でも同様の異常な結果が発生し、0 が返されます。
この動作はバグではなく、十分に文書化された機能です。
厳密にはスピーキング: 3 番目のパラメータを理解する
in_array() と array_search() は両方ともオプションの3 番目のパラメータ $strict は、デフォルトで FALSE になります。
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ])
これは、デフォルトでは、両方の関数が緩い比較 (==) を使用することを意味します。これらは、値の型を無視して、同等性のみに基づいて値を評価します。したがって、指定された例では、型のジャグリングにより、TRUE == "空でない文字列" は true を返します。
厳密性の強制: $strict を TRUE に設定
正確な比較を保証するには、$strict を TRUE に設定します。これにより、PHP は厳密な比較 (===) を使用し、比較する値の値と型の両方をチェックするようになります。
$result = in_array("test", $arr, TRUE); var_dump($result); // Output: bool(false)
この場合、in_array() は期待どおり、正しく false を返します。
in_array() と array_search() を使用する場合は、型ジャグリングの微妙な違いと $strict の役割を理解することが重要であることに注意してください。これらの関数は強力な検索機能を提供しますが、これらの微妙な点が見落とされると、その動作が予測不能になる可能性があります。
以上がPHP で存在しない値に対して「in_array()」が True を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。