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

PHP 關聯陣列操作完全指南:增刪改查、排序與進階技巧

     編輯:PHP 相關知識

前言

PHP 是弱型別語言,陣列同時支援數字索引與關聯鍵值。關聯陣列(Associative Array)以字串為鍵,是處理結構化資料的核心工具。本文系統整理關聯陣列的常見操作。

1. 新增元素

直接指定鍵名賦值即可:

$arr = [];
$arr['name'] = '張三';
$arr['email'] = 'zhang@example.com';
// 或一次宣告
$arr = ['name' => '李四', 'age' => 25];

注意: array_push()、array_unshift() 僅適用數字索引陣列,關聯陣列請直接賦值。

2. 刪除元素

$arr = ['a' => 1, 'b' => 2, 'c' => 3];
unset($arr['b']); // 刪除指定鍵
// 陣列鍵名保持不變,不會重新索引

數字索引陣列可用 array_shift()(刪首)、array_pop()(刪尾),關聯陣列不適用。

3. 交換鍵與值

$states = ['Taipei' => '台北', 'Taichung' => '台中'];
$flipped = array_flip($states);
// 結果:['台北' => 'Taipei', '台中' => 'Taichung']

若原陣列值有重複,後者會覆蓋前者。

4. 合併陣列

$arr1 = ['a' => 1, 'b' => 2];
$arr2 = ['c' => 3, 'b' => 20]; // 鍵 'b' 重複
$merged = array_merge($arr1, $arr2);
// 結果:['a' => 1, 'b' => 20, 'c' => 3] 後者覆蓋前者
// 若為數字索引,會重新索引從 0 開始

5. 批次修改值(搭配回呼函數)

$data = ['name' => 'john doe', 'city' => 'taipei'];
$formatted = array_map('ucwords', $data);
// 結果:['name' => 'John Doe', 'city' => 'Taipei']

也可使用匿名函數處理複雜邏輯:

$clean = array_map(function($v) {
    return htmlspecialchars(trim($v));
}, $input);

6. 依鍵名排序

$arr = ['z' => 1, 'a' => 2, 'm' => 3];
ksort($arr); // 依鍵名升冪排序,保持鍵值關聯
// 結果:['a' => 2, 'm' => 3, 'z' => 1]
// 相關:krsort() 降冪、uksort() 使用者自訂比較

7. 隨機打亂或取樣

$arr = ['a', 'b', 'c', 'd', 'e'];
shuffle($arr); // 原地打亂順序
$randomKey = array_rand($arr, 2); // 取 2 個隨機鍵名
$randomVal = $arr[$randomKey[0]];

8. 判斷鍵或值是否存在

$arr = ['id' => 100, 'status' => 'active'];
isset($arr['id']);        // true,檢查鍵存在且非 null
array_key_exists('id', $arr); // true,檢查鍵存在(含 null 值)
in_array('active', $arr); // true,檢查值存在

9. 搜尋鍵名對應的值

$arr = ['apple' => '蘋果', 'banana' => '香蕉'];
$key = array_search('香蕉', $arr); // 回傳 'banana'
$key = array_search('橘子', $arr); // 回傳 false

10. 進階:標準 PHP 函式庫 (SPL)

SPL 提供物件導向的陣列操作介面:

  • ArrayObject:陣列物件化,支援迭代、計數、序列化。
  • ArrayIterator、RecursiveArrayIterator:遍歷多維陣列。
  • FilterIterator:過濾元素。
$obj = new ArrayObject(['x' => 1, 'y' => 2]);
$obj->append(3); // 新增數字索引元素
foreach ($obj as $k => $v) { /* ... */ }

總結表

操作函數/語法備註
新增/修改$arr['key'] = $val最通用方式
刪除unset($arr['key'])不重新索引
交換鍵值array_flip()值重複會覆蓋
合併array_merge()字串鍵:後覆蓋前;數字鍵:重新索引
映射轉換array_map()不改變原陣列
鍵名排序ksort()/krsort()原地排序
隨機打亂shuffle()原地打亂,鍵名重新索引
檢查鍵存在isset() / array_key_exists()isset 忽略 null 值
檢查值存在in_array()大型陣列效能較差
搜尋值對應鍵array_search()找到第一個即返回
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved