ホームページ >バックエンド開発 >PHPチュートリアル >PHP の `in_array()` および `array_search()` が予期しない結果を返す場合があるのはなぜですか?

PHP の `in_array()` および `array_search()` が予期しない結果を返す場合があるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-24 01:27:11960ブラウズ

Why Do PHP's `in_array()` and `array_search()` Sometimes Return Unexpected Results?

PHP の in_array() および array_search() 関数: 奇妙な動作に対処する

PHP 関数 in_array() および array_search() は特異な動作を示します配列内の値をチェックするために使用される場合。この不可解な問題は、配列に異なる型の要素が含まれている場合に発生します。

例:

$arr = [TRUE, "some string", "something else"];

$result = in_array("test", $arr);
var_dump($result);  // Output: bool(true)

$result = array_search("test", $arr);
var_dump($result);  // Output: int(0)

驚きですね。どちらの関数も true を返し、「test」が配列内にないことが明らかであっても、配列内にあることを示します。この動作は、これらの関数で使用されるデフォルトの比較メカニズムに起因します。

厳密比較:

デフォルトでは、in_array() と array_search() は緩い比較を使用します。 (==)。比較される値の型が異なる場合でも true と評価されます。この例では、配列内の TRUE 要素が自動的に文字列にキャストされ、TRUE == "test" が true と評価されます。

解決策: 厳密な比較を強制する

この予期しない動作を防ぐには、これらの関数のオプションの 3 番目のパラメーターを true に設定して、厳密な比較 (===) を指定する必要があります。これにより、関数は比較時に要素の値と型の両方をチェックするようになり、より正確な結果が保証されます。

$result = in_array("test", $arr, true);
var_dump($result);  // Output: bool(false)

$result = array_search("test", $arr, true);
var_dump($result);  // Output: int(-1)

この改訂された例では、関数が次のように指示されているため、正しい結果が得られます。厳密な比較を使用します。 「test」が配列内に見つからず、戻り値はそれを反映しています。

以上がPHP の `in_array()` および `array_search()` が予期しない結果を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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