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

PHP 關聯數組鍵值搜索與獲取完全指南

     編輯:PHP 綜合知識

核心函數速查表

函數用途返回值
array_key_exists()檢查鍵是否存在bool
array_search()搜索值並返回對應鍵mixed (鍵) / false
array_keys()獲取所有鍵(可按值篩選)array
array_values()獲取所有值並重建數字索引array

1. 搜索鍵:array_key_exists()

嚴格檢查鍵是否存在,不轉換類型。注意:PHP 8.0+ 推薦使用 $arr['key'] ?? null 或 isset($arr['key'])(性能更好),但 isset() 會對 null 值返回 false。

$states = [
    'Delaware' => 'December 7, 1787',
    'Pennsylvania' => 'December 12, 1787',
    'Ohio' => 'March 1, 1803'
];

if (array_key_exists('Ohio', $states)) {
    printf('Ohio 加入聯邦時間:%s', $states['Ohio']);
}

2. 搜索值:array_search()

返回第一個匹配值的鍵。若需所有匹配鍵,請使用 array_keys($arr, $value)。

$founded = array_search('December 7', $states);
if ($founded) {
    printf('%s 成立於 %s', $founded, $states[$founded]);
}
// 輸出:Delaware 成立於 December 7

3. 獲取所有鍵:array_keys()

$keys = array_keys($states);
// ['Delaware', 'Pennsylvania', 'Ohio']

// 帶值篩選:僅獲取值為 'December 7, 1787' 的鍵
$keys = array_keys($states, 'December 7, 1787');

4. 獲取所有值:array_values()

重建 0 起始的數字索引,適用於需按順序遍歷、輸出 JSON 數組的場景。

$population = ['Ohio' => '11,421,267', 'Iowa' => '2,936,760'];
$vals = array_values($population);
// ['11,421,267', '2,936,760']

5. 遍歷數組的多種姿勢

內部指針操作(底層控制)

$capitals = ['Ohio' => 'Columbus', 'Iowa' => 'Des Moines'];
while ($key = key($capitals)) {
    echo $key . '<br>';
    next($capitals); // 移動指針
}

現代最佳實踐:foreach

// 僅值
foreach ($arr as $val) { ... }

// 鍵值對
foreach ($arr as $key => $val) { ... }

// 引用修改原值
foreach ($arr as &$val) { $val *= 2; }
unset($val); // 釋放引用

高級:多維數組遞歸遍歷

function deepTraverse($arr, $depth = 0) {
    foreach ($arr as $k => $v) {
        echo str_repeat('  ', $depth) . "$k => ";
        if (is_array($v)) {
            echo PHP_EOL;
            deepTraverse($v, $depth + 1);
        } else {
            echo $v . PHP_EOL;
        }
    }
}

性能與陷阱提示

  • in_array() 大數組中極慢(O(n)),頻繁查找請翻轉鍵值用 isset($flip[$val])(O(1))。
  • array_search() 嚴格模式(第三參數 true)避免類型轉換陷阱(如 0 == 'abc')。
  • 遍歷時修改數組結構(增刪元素)會導致未定義行為,請先複製或收集待操作鍵。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved