首頁 >後端開發 >php教程 >為什麼 PHP 的 `in_array()` 和 `array_search()` 有時會回傳意外結果?

為什麼 PHP 的 `in_array()` 和 `array_search()` 有時會回傳意外結果?

Patricia Arquette
Patricia Arquette原創
2024-12-24 01:27:111014瀏覽

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

PHP 的in_array() 和array_search() 函數:解決奇怪的行為

PHP 函數:解決奇怪的行為

PHP 函數:解決奇怪的行為

$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)
PHP 函數:解決奇怪的行為

PHP 函數奇怪的行為當用於檢查數組中的值時。當陣列包含不同類型的元素時,就會出現這個令人費解的問題。

例如:

令人驚訝,不是嗎?兩個函數都傳回 true,表示「test」在數組中,儘管它顯然不在數組中。此行為源自於這些函數所使用的預設比較機制。

嚴格與鬆散比較:

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

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

預設情況下,in_array() 和array_search() 使用鬆散比較(==),即使所比較的值的類型不同,它也會評估true。在我們的範例中,陣列中的 TRUE 元素會自動轉換為字串,導致 TRUE == "test" 計算結果為 true。

解決方案:強制嚴格比較為了防止這種意外行為,需要透過將這些函數的可選第三個參數設為true 來指定嚴格比較(===)。這迫使函數在比較時檢查元素的值和類型,以確保更準確的結果。 在這個修改後的範例中,獲得了正確的結果,因為函數被指示使用嚴格比較。在數組中找不到“test”,傳回值反映了這一點。

以上是為什麼 PHP 的 `in_array()` 和 `array_search()` 有時會回傳意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn