in_array() 是判斷值是否存在於陣列的標準函式,關鍵在於理解嚴格模式對型別比較的影響。
bool in_array(mixed $needle, array $haystack, bool $strict = false)
| 參數 | 說明 |
|---|---|
| $needle | 搜尋的值,字串區分大小寫 |
| $haystack | 被搜尋的陣列 |
| $strict | true=嚴格比較(值+型別),false=鬆散比較(預設) |
| 誤區 | 正確認知 |
|---|---|
| 預設模式型別安全 | 鬆散比較會型別轉換,"1"==1、true==1、null==false |
| 搜尋鍵名用 in_array | 搜尋鍵名請用 array_key_exists() 或 isset() |
| 多維陣列直接搜尋 | 只搜尋第一層,需遞迴或 array_walk_recursive |
array_search($needle, $haystack):回傳找到的**鍵名**(找不到回傳 false)array_keys($haystack, $needle):回傳**所有匹配的鍵名**陣列array_key_exists($key, $arr):檢查**鍵名**是否存在(值為 null 也回傳 true)isset($arr[$key]):檢查鍵名存在且值不為 null(效能最好)牢記 in_array($v, $arr, true) 開啟嚴格模式避免型別轉換陷阱,大陣列查找用 array_flip() + isset() 優化效能。