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

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

Patricia Arquette
發布: 2024-12-24 01:27:11
原創
956 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板