語法
bool in_array(mixed $needle, array $haystack, bool $strict = false)
參數說明
$needle:搜尋的值
$haystack:目標陣列
$strict:true 時同時比較**型別** (預設 false 僅比較值)
基本範例
$os = ['Mac', 'NT', 'Irix', 'Linux'];
var_dump(in_array('Irix', $os)); // true
var_dump(in_array('mac', $os)); // false (區分大小寫)
var_dump(in_array('mac', $os, true)); // false
// 型別嚴格模式
var_dump(in_array(0, ['apple', 'banana'])); // true! 字串轉整數為 0
var_dump(in_array(0, ['apple', 'banana'], true)); // false (型別不同)
多維陣列搜尋
$users = [
['id'=>1, 'name'=>'Alice'],
['id'=>2, 'name'=>'Bob'],
];
// 方法 1: array_column + in_array (PHP 5.5+)
$names = array_column($users, 'name');
var_dump(in_array('Alice', $names)); // true
// 方法 2: 自訂遞迴搜尋
function in_array_r($needle, $haystack, $strict=false) {
foreach ($haystack as $item) {
if (is_array($item)) {
if (in_array_r($needle, $item, $strict)) return true;
} elseif (($strict && $item === $needle) || (!$strict && $item == $needle)) {
return true;
}
}
return false;
}
效能考量
| 陣列大小 | in_array | isset/array_key_exists | 建議 |
| < 100 | 可接受 | 極快 | 直接用 |
| 100 - 10,000 | 明顯變慢 O(n) | O(1) | 改用鍵名查找 |
| > 10,000 | 嚴重效能問題 | O(1) | 重構為關聯陣列/資料庫查詢 |
優化技巧
// 將值轉為鍵名 (去重 + O(1) 查找)
$lookup = array_flip($largeArray); // 或 array_fill_keys($largeArray, true)
isset($lookup[$needle]); // 極快
// 陣列不變、頻繁查找:建立一次快取
static $cache = null;
if ($cache === null) $cache = array_flip($largeArray);
return isset($cache[$needle]);
相關函式
array_search($needle, $haystack, $strict):回傳**鍵名** (找不到回傳 false)
array_key_exists($key, $array):檢查**鍵名** 是否存在
isset($array[$key]):檢查鍵名存在且值非 null (最快)