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

PHP 獲取陣列中元素位置的兩種方法:array_keys 與 foreach 遍歷對比

     編輯:PHP 相關知識

方法一:array_keys() 內建函數(推薦)

語法:`array_keys(array, search_value, strict)`

  • strict=true:嚴格比對型別(`===`)。
  • 回傳所有匹配鍵名組成的陣列,若無匹配回傳空陣列。
$test = [10, 20, 30, "10", "20", "30"];
print_r(array_keys($test, "10", true));
// 輸出:Array ( [0] => 3 )  // 只有字串 "10" 在索引 3

多維陣列查找值的位置(需自行遞迴)

function array_keys_recursive($array, $search, $strict = false) {
    $keys = [];
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            $sub = array_keys_recursive($v, $search, $strict);
            if ($sub) $keys[$k] = $sub;
        } elseif (($strict && $v === $search) || (!$strict && $v == $search)) {
            $keys[] = $k;
        }
    }
    return $keys;
}

方法二:foreach 手動遍歷計數(教學用)

$one = [1, 2, 3, 4];
foreach ($one as $k => $v) {
    echo "key=$k & value=$v
"; } $two = [ "test1" => ['name'=>'tank', 'phone'=>12412433], "test2" => ['name'=>'ying', 'phone'=>252523523], "test3" => ['name'=>'zhang','phone'=>656452345], ]; $i = 0; foreach ($two as $k => $v) { foreach ($v as $val) { if ($val === 'tank') { // 注意:原代碼 $v='tank' 是賦值錯誤,應為 === echo "Found at index: $i"; } $i++; } }

效能與適用場景對比

維度array_keysforeach 手動
程式碼簡潔度✅ 一行搞定需寫迴圈、計數器
效能(大陣列)C 底層實現,極快PHP 解釋執行,較慢
多維陣列支援需自寫遞迴靈活控制遞迴深度與路徑記錄
回傳格式直接得鍵名陣列可自訂回傳(索引、路徑、父鍵等)

實務建議

  1. 一維陣列、單值查找:直接用 `array_keys($arr, $val, true)`。
  2. 需獲取「第一個」位置:`$keys = array_keys(...); $first = $keys[0] ?? null;`。
  3. 多維陣列或需完整路徑(如 `['users'][3]['email']`):封裝遞迴函數或使用 `RecursiveArrayIterator` 搭配 `RecursiveCallbackFilterIterator`。
  4. 極大陣列(>10萬)頻繁查找:考慮建立「值→鍵名」反向索引陣列,或改用資料庫全文搜尋。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved