array_column() 是 PHP 5.5+ 引入的實用函數,可從多維陣列提取單一欄位值。但許多舊專案仍運行在 PHP 5.3/5.4 環境。本文提供純 PHP 相容實作,功能完整支援 $column_key 與可選的 $index_key。
1, 'name' => 'Tom', 'age' => 20],
['id' => 2, 'name' => 'Jack', 'age' => 21],
['id' => 3, 'name' => 'Martin', 'age' => 28],
];
// 提取 name 欄位 -> 索引重設為 0,1,2...
$names = array_column($a, 'name');
// ['Tom', 'Jack', 'Martin']
// 提取 name,以 id 為鍵
$names = array_column($a, 'name', 'id');
// [1 => 'Tom', 2 => 'Jack', 3 => 'Martin']
?>
增強版:支援物件、巢狀鍵、嚴格模式
完整測試套件
1, 'user' => ['name' => 'Tom'], 'age' => 20], ['id' => 2, 'user' => ['name' => 'Jack'], 'age' => 21], ['id' => 3, 'user' => ['name' => 'Martin'], 'age' => 28], ['id' => 4, 'age' => 25], // 缺 user 欄位 ]; echo "=== 基本提取 ===\n"; var_dump(array_column($data, 'age')); // [20, 21, 28, 25] echo "\n=== 指定 index_key ===\n"; var_dump(array_column($data, 'age', 'id')); // [1=>20, 2=>21, 3=>28, 4=>25] echo "\n=== 巢狀鍵提取 (user.name) ===\n"; var_dump(array_column($data, 'user.name')); // ['Tom', 'Jack', 'Martin'] (第4筆缺失被跳過) echo "\n=== 巢狀鍵 + index_key ===\n"; var_dump(array_column($data, 'user.name', 'id')); // [1=>'Tom', 2=>'Jack', 3=>'Martin'] echo "\n=== 物件支援 ===\n"; $objData = [ (object)['id' => 1, 'name' => 'Tom'], (object)['id' => 2, 'name' => 'Jack'], ]; var_dump(array_column($objData, 'name', 'id')); // [1=>'Tom', 2=>'Jack']效能對比與建議
| 版本 | 10萬筆資料耗時 | 記憶體 |
|---|---|---|
| 原生 (PHP 7.4+) | ~3ms | 低 (C 實作) |
| 基本相容版 | ~15ms | 中 |
| 增強版 | ~25ms | 中高 |
array_map + array_values 或生成器逐行處理| 函數 | 用途 | PHP 版本 |
|---|---|---|
| array_column | 提取單欄位 | 5.5+ |
| array_map | 對每元素套用回調 | 4.0+ |
| array_filter | 過濾元素 | 4.0+ |
| array_reduce | 累加器模式 | 4.0+ |
| array_combine | 兩陣列組合為鍵值對 | 5.0+ |
| array_keys / array_values | 取得鍵/值陣列 | 4.0+ |
更多 PHP 相關內容可參考本站專題:《PHP 字符串用法總結》、《PHP 陣列操作技巧大全》、《PHP 運算與運算符用法總結》、《PHP 網絡編程技巧總結》、《PHP 基本語法入門教程》、《PHP 操作 Office 文檔技巧總結》、《PHP 日期與時間用法總結》、《PHP 面向對象程序設計入門教程》、《PHP+MySQL 數據庫操作入門教程》及《PHP 常見數據庫操作技巧匯總》。