首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP array_keys 進階應用:精準查找數組元素位置與嚴格模式詳解

     編輯:PHP 綜合知識

函數簽名

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'] ✅

進階場景實戰

1. 多維數組查找鍵路徑

$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']

2. 關聯數組值去重保留首個鍵

$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']

3. 搜尋鍵名模式(配合 preg_grep)

$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'truefalse
0 vs falsetruefalse
null vs ''truefalse
[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% 的類型陷阱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved