在 PHP 開發中,檢查陣列是否包含某個值是高頻操作。本文系統整理 in_array()、array_key_exists()、array_search() 三大核心函式的用法差異、效能特徵與適用場景,助你精準選型。
in_array(mixed $needle, array $haystack, bool $strict = false): bool 專門用於在陣列「值」中搜尋指定字串。第三個參數 $strict 設為 true 時會同時比對資料型別,避免 "123" === 123 這類隱性轉型陷阱。
<?php
$arr = ['可以', '如何', '方法', '知道', '沒有', '不要'];
$isin = in_array('如何2', $arr); // 嚴格模式建議:in_array('如何2', $arr, true)
echo $isin ? 'in====' . $isin : 'out====' . $isin; // 輸出:out====
?>
array_key_exists(mixed $key, array $array): bool 僅檢查「鍵名」是否存在,不關心值。因為 PHP 內部將陣列實作為雜湊表,鍵名查找屬 O(1) 操作,資料量大時效能顯著優於值遍歷。
<?php
$data = [1 => 'a', 2 => 'b', 3 => 'c'];
var_dump(array_key_exists(2, $data)); // true
var_dump(array_key_exists('foo', $data)); // false
?>
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false 邏輯同 in_array(),但找到時回傳對應「鍵名」而非布林值,未找到回傳 false。需注意 0 或 '' 等假值鍵名,務必用 === false 判斷。
array_key_exists() 速度最快,但將值轉為鍵的陣列(如 [1=>true, 2=>false])記憶體佔用約為索引陣列([1,2,3])的 2 倍。| 場景 | 推薦函式 | 關鍵參數 |
|---|---|---|
| 單純判斷值是否存在 | in_array() | 嚴格模式 true |
| 高頻鍵名存在性檢查 | array_key_exists() | 鍵名轉換預處理 |
| 需要後續操作該元素鍵名 | array_search() | 嚴格模式 + === false 判斷 |
掌握三者差異,能在可讀性與效能間找到最佳平衡點。