<?php
$a = ["1,2,3", "4"];
if (in_array(1, $a)) { // 參數 1 是整數,未加引號
echo "條件成立"; // 竟然輸出「條件成立」!
}
| 陣列內容 | 搜尋值 | 結果 | 說明 |
|---|---|---|---|
| ["1,2,3", "4"] | 1 (整數) | true | 字串 "1,2,3" 以 "1" 開頭,被視為匹配 |
| ["a,2,3", "4"] | 'a' (字串) | false | 嚴格比對字串 "a" 不等於 "a,2,3" |
| ["1,2,3", "4"] | '1' (字串) | false | 字串 "1" 不等於 "1,2,3" |
| [0, "m"] | 'mc6' (字串) | true | 字串轉整數為 0,匹配陣列第一個元素 0 |
in_array() 預設使用非嚴格模式(loose comparison),遵循 PHP 型別轉換規則:
"1,2,3" 轉整數 → 1(取開頭數字部分)"mc6" 轉整數 → 0(非數字開頭)0 == "任何非數字開頭字串" 為 true<?php
// 第三個參數設為 true,啟用嚴格型別檢查
in_array($needle, $haystack, true);
嚴格模式下: 型別與值必須同時相等,上述所有「誤判」案例均會回傳 false。
in_array($v, $arr, true)isset($map[$key]) 陣列鍵值查找(O(1))替代 in_array(O(n))理解 PHP 型別轉換規則,是避開 in_array 等函數隱藏坑點的關鍵。