<?php
var_dump(in_array(0, ['a', 'b'])); // true (!)
var_dump(in_array('0', ['a', 'b'])); // false
var_dump(in_array(null, ['a', 'b'])); // false
var_dump(in_array(false, ['a', 'b'])); // true (!)
var_dump(in_array('', ['a', 'b'])); // false
// 原因:'a' == 0 為 true(字串轉數字 = 0)
<?php
var_dump(in_array(0, ['a', 'b'], true)); // false ✓
var_dump(in_array('0', ['0', '1'], true)); // true
var_dump(in_array(123, ['123'], true)); // false (int vs string)
var_dump(in_array(123, [123], true)); // true
in_array:O(n) 線性搜尋,每次比較需型別轉換(非嚴格模式)array_flip + isset O(1)<?php
$large = range(1, 100000);
$lookup = array_flip($large); // 鍵值互換
// O(1) 查找
isset($lookup[50000]); // true
isset($lookup[999999]); // false
// 保留原值關聯
$map = ['a' => 1, 'b' => 2];
isset($map['a']); // true
$users = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
];
// 錯誤:in_array 只比較第一層
// in_array(['id' => 1], $users); // false
// 正確:array_column + in_array
$ids = array_column($users, 'id');
in_array(1, $ids); // true
// 或用 array_search 取得鍵
$key = array_search(1, $ids); // 0
| 場景 | 推薦做法 |
|---|---|
| 小陣列(<50)、簡單值 | in_array($val, $arr, true) 嚴格模式 |
| 大陣列、頻繁查找 | array_flip + isset 或 array_column 建立索引 |
| 關聯陣列找鍵 | array_key_exists / isset |
| 物件集合找屬性 | array_column / 迴圈 / Collection 庫 |
| 需自訂比較邏輯 | array_filter + 閉包 |
array_search($needle, $haystack, true):回傳鍵名,找不到 falsearray_keys($arr, $val, true):回傳所有匹配的鍵array_key_exists($key, $arr):檢查鍵是否存在(含 null 值)原始來源:www.111cn.net