ホームページ >バックエンド開発 >PHPチュートリアル >PHP で存在しない値に対して「in_array()」が True を返すのはなぜですか?

PHP で存在しない値に対して「in_array()」が True を返すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 11:45:09227ブラウズ

Why Does `in_array()` Return True for a Non-Existent Value in PHP?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。