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 函數奇怪的行為當用於檢查數組中的值時。當陣列包含不同類型的元素時,就會出現這個令人費解的問題。
例如:令人驚訝,不是嗎?兩個函數都傳回 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中文網其他相關文章!