array_keys(array $array, mixed $filter_value = null, bool $strict = false): array
$array:目標數組$filter_value:可選,指定值則只返回匹配的鍵$strict:true 開啟嚴格模式(類型+值雙重檢查)$arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 2];
// 獲取所有鍵
print_r(array_keys($arr));
// ['a', 'b', 'c', 'd']
// 獲取值為 2 的鍵(非嚴格)
print_r(array_keys($arr, 2));
// ['b', 'd']
// 嚴格模式:類型必須一致
print_r(array_keys($arr, '2', true));
// [] 空,因為 '2'(string) !== 2(int)
print_r(array_keys($arr, 2, true));
// ['b', 'd'] ✅
$data = [
'user' => ['id' => 1, 'name' => 'John'],
'posts' => [['id' => 10], ['id' => 20]]
];
// 遞歸查找所有 'id' 鍵
function findKeys(array $array, string $targetKey): array {
$keys = [];
foreach ($array as $k => $v) {
if ($k === $targetKey) $keys[] = $k;
if (is_array($v)) $keys = array_merge($keys, findKeys($v, $targetKey));
}
return $keys;
}
print_r(findKeys($data, 'id')); // ['id', 'id', 'id']
$data = ['a'=>1, 'b'=>2, 'c'=>1, 'd'=>3, 'e'=>2];
// 利用 array_flip 特性:值變鍵,重複值保留最後一個
// 結合 array_keys 反轉回來,實現保留首個鍵
$unique = array_keys(array_flip(array_flip($data)));
// 更簡單:array_keys(array_unique($data)) 但需注意類型轉換
// 推薦:array_filter + 閉包
$seen = [];
$unique = array_keys(array_filter($data, function($v) use (&$seen) {
return !in_array($v, $seen, true) && $seen[] = $v;
}));
// ['a', 'b', 'd']
$arr = ['user_id'=>1, 'user_name'=>'John', 'post_id'=>10, 'post_title'=>'Hi'];
// 查找以 user_ 開頭的鍵
$userKeys = preg_grep('/^user_/', array_keys($arr));
// ['user_id', 'user_name']
| 比較 | 非嚴格 (==) | 嚴格 (===) |
|---|---|---|
| 1 vs '1' | true | false |
| 0 vs false | true | false |
| null vs '' | true | false |
| [1] vs [1] | false (不可比較) | false |
建議:涉及用戶輸入、API 數據、資料庫返回時,永遠啟用嚴格模式,避免類型隱式轉換導致邏輯錯誤。
array_keys 返回新數組,大數組會佔用內存array_key_exists 或 isset($arr[$key])array_search($value, $arr, true) 直接返回單個鍵array_keys 是 PHP 數組操作瑞士軍刀:獲取所有鍵、按值反查鍵、配合嚴格模式精準匹配。掌握 $strict = true 習慣,能避開 90% 的類型陷阱。