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

PHP 高效提取二維陣列指定鍵值的多種方法

     編輯:PHP 相關知識

前言

在 PHP 開發中,經常需要從資料庫查詢結果(典型的二維陣列)中提取某個欄位的所有值,組成一個一維陣列。例如將用戶列表中的所有 id 或 name 獨立出來。雖然用 foreach 迴圈配合 array_push 也能完成,但效率較低。本文介紹三種原生函數方案,並分析其效能差異。

範例資料結構

$users = [
    ['id' => 1, 'name' => '張三', 'email' => 'zhangsan@sina.com'],
    ['id' => 2, 'name' => '李四', 'email' => 'lisi@163.com'],
    ['id' => 5, 'name' => '王五', 'email' => '10000@qq.com'],
    // ... 更多記錄
];

需求一:提取數字索引鍵(如 id)

方法 1:array_map + array_shift(不推薦)

$ids = array_map('array_shift', $users);

此法利用 array_shift 取出每個子陣列的第一個值。但它假設 id 永遠是第一個元素,且會修改原陣列,實際專案中極不穩健。

方法 2:array_column(PHP 5.5+,首選)

$ids = array_column($users, 'id');

array_column 專為此場景設計,語意清晰、效能最高,且不改變原陣列。只要 PHP 版本 ≥ 5.5,請優先使用。

需求二:提取字串索引鍵並保留關聯(如 id => name)

若需要 [1 => '張三', 2 => '李四', 5 => '王五'] 這樣的關聯陣列,可用 array_reduce:

$nameMap = array_reduce($users, function($carry, $item) {
    $carry[$item['id']] = $item['name'];
    return $carry;
}, []);

註:舊寫法常用 create_function,已棄用,請改用匿名函數。

效能對比與建議

  • array_column:C 底層實現,速度最快,記憶體佔用最少。
  • array_reduce:需 PHP 迴圈,較慢但靈活,適合需轉換邏輯的場景。
  • foreach + array_push:最慢,僅適合極簡單邏輯或舊版本環境。

實務上,只要版本允許,永遠優先用 array_column;需建立映射表時,array_reduce 是乾淨的函數式寫法。

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