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

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

     編輯:PHP 相關知識

關聯數組是 PHP 處理鍵值對數據的核心結構。本文系統整理 array_key_exists、array_search、array_keys、array_values、key/next/current 遍歷函數族的用法、區別與最佳實踐,助你高效操作數組。

一、搜索鍵:array_key_exists()

<?php
$state = [
    "Delaware" => "December 7, 1787",
    "Pennsylvania" => "December 12, 1787",
    "Ohio" => "March 1, 1803"
];

if (array_key_exists("Ohio", $state)) {
    printf("Ohio joined the Union on %s", $state["Ohio"]);
}
// 輸出: Ohio joined the Union on March 1, 1803
?>
  • 返回 bool,僅檢查鍵是否存在,不檢查值。
  • 性能優於 isset($arr['key'])(後者值為 null 返回 false)。
  • 嚴格區分大小寫。

二、搜索值:array_search()

<?php
$state = [
    "Ohio" => "March 1",
    "Delaware" => "December 7",
    "Pennsylvania" => "December 12"
];

$founded = array_search("December 7", $state);
if ($founded) {
    printf("%s was founded on %s.", $founded, $state[$founded]);
}
// 輸出: Delaware was founded on December 7.
?>
  • 返回 第一個匹配值對應的鍵,未找到返回 false。
  • 默認非嚴格比較('1' == 1 為 true),傳入第三參數 true 啟用嚴格模式 ===。
  • 若需所有匹配鍵,請用 array_keys($arr, $value)。

三、獲取所有鍵:array_keys()

<?php
$state = [
    "Delaware" => "December 7, 1787",
    "Pennsylvania" => "December 12, 1787",
    "New Jersey" => "December 18, 1787"
];

$keys = array_keys($state);
print_r($keys);
/* 輸出:
Array
(
    [0] => Delaware
    [1] => Pennsylvania
    [2] => New Jersey
)
*/

// 可選第二參數:只返回值等於 "December 7, 1787" 的鍵
$keys = array_keys($state, "December 7, 1787");
?>

四、獲取所有值:array_values()

<?php
$population = [
    "Ohio" => "11,421,267",
    "Iowa" => "2,936,760"
];

print_r(array_values($population));
/* 輸出: 重新索引的數值數組
Array
(
    [0] => 11,421,267
    [1] => 2,936,760
)
*/
  • 返回值數組並重置為 0 起始數值索引,適合 json_encode 輸出純列表。

五、遍歷數組:內部指針函數族

函數作用指針移動
key($arr)返回當前指針位置的鍵否
current($arr)返回當前指針位置的值否
next($arr)指針前移一位,返回新位置的值是
prev($arr)指針後移一位是
reset($arr)指針重置到第一個,返回首值是
end($arr)指針移到最後,返回尾值是
each($arr)返回當前鍵值對並前移(PHP 7.2 棄用,建議用 foreach)是

示例:手動指針遍歷輸出所有鍵

<?php
$capitals = ["Ohio" => "Columbus", "Iowa" => "Des Moines"];
echo "<p>Can you name the capitals of these states?</p>";

while ($key = key($capitals)) {
    printf("%s <br>", $key);
    next($capitals); // 關鍵:必須移動指針,否則死循環
}
// 輸出: Ohio <br> Iowa <br>
?>

六、現代最佳實踐:foreach 一統江湖

<?php
// 1. 只需值
foreach ($arr as $value) { ... }

// 2. 需要鍵值
foreach ($arr as $key => $value) { ... }

// 3. 引用修改原值
foreach ($arr as &$value) { $value = strtoupper($value); }
unset($value); // 好習慣:銷毀引用
?>
  • 語法簡潔、無指針副作用、支持引用修改、性能最優。
  • 內部自動處理指針,不干擾其他代碼對同一數組的遍歷。

七、常見陷阱避坑指南

陷阱原因對策
isset($arr['key']) 判斷鍵存在值為 null 返回 false用 array_key_exists 或 array_key_exists('key', $arr)
array_search 返回 0 導致 if 判斷失敗0 == false 為 true用 !== false 或 array_keys($arr, $val) 取數組
foreach 引用殘留污染後續循環引用變量在循環外保留循環後 unset($value)
內部指針函數混用導致位置錯亂全局指針共享棄用指針函數,全面改用 foreach

八、總結

  • 搜鍵 → array_key_exists
  • 搜值取鍵 → array_search (單個) / array_keys($arr, $val) (多個)
  • 取所有鍵 → array_keys
  • 取所有值重置索引 → array_values
  • 日常遍歷 → 永遠優先 foreach

熟練掌握這組函數,讓數組操作代碼更健壯、可讀、高效。

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