萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 陣列操作完全指南:值操作、遍歷與排序

前言

陣列是 PHP 中最常用的資料結構之一,掌握陣列的核心操作對於高效開發至關重要。本文系統整理陣列值的提取、分割、轉換、查找、統計以及遍歷與排序的實用技巧,並附上可直接執行的程式碼範例,適合初學者快速入門與進階開發者查閱參考。

一、陣列值的核心操作

1. 值的析取

使用 list() 可一次將陣列元素賦值給多個變數:

$arr = ['apple', 'banana', 'cherry'];
list($a, $b, $c) = $arr; // $a='apple', $b='banana', $c='cherry'

// 變數多於元素時,多餘變數設為 NULL
list($x, $y, $z, $w) = $arr; // $w = NULL

// 以逗號跳過特定元素
list($first, , $third) = $arr; // $first='apple', $third='cherry'

2. 陣列分割與子陣列提取

  • array_slice():返回新陣列,索引重置從 0 開始,適合數值索引陣列。
  • array_splice():可刪除並替換元素,原陣列會被修改,且保留字串鍵名。
$arr = ['a', 'b', 'c', 'd', 'e'];
$sub = array_slice($arr, 1, 3); // ['b', 'c', 'd']

// array_splice 刪除並插入
array_splice($arr, 1, 2, ['x', 'y']); // $arr 變為 ['a', 'x', 'y', 'd', 'e']

3. 將陣列拆分為多維陣列

array_chunk($array, $size, $preserve_keys=false) 可將陣列按指定大小分塊:

$arr = range(1, 10);
$chunks = array_chunk($arr, 3);
// 結果:[[1,2,3], [4,5,6], [7,8,9], [10]]

4. 鍵與值的互轉與檢查

$arr = ['id' => 1, 'name' => 'Tom', 'age' => 20];

$keys   = array_keys($arr);    // ['id', 'name', 'age']
$values = array_values($arr);  // [1, 'Tom', '20'] 索引重置

// 檢查鍵是否存在
isset($arr['name']);           // true (效能較好)
array_key_exists('name', $arr); // true (也檢查 NULL 值)

5. 陣列與變數互轉

  • extract($arr):將陣列鍵值對導入當前符號表為變數(需注意覆蓋風險)。
  • compact('var1', 'var2'):將指定變數組成關聯陣列。

6. 陣列查找

$arr = ['a', 'b', 'c'];
in_array('b', $arr);      // true
array_search('b', $arr);  // 1 (返回鍵名)

7. 常用統計與運算函數

array_sum($arr);        // 總和
array_merge($a, $b);    // 合併 (數值鍵重置,字串鍵後者覆蓋)
array_diff($a, $b);     // 差集 (只比較值)
array_filter($arr, fn); // 過濾

8. 集合、堆疊、佇列操作

操作函數說明
去重array_unique()保留首次出現的鍵名
交集array_intersect()保留第一個陣列的鍵名
入堆疊array_push()尾部新增
出堆疊array_pop()尾部移除並返回
入佇列array_unshift()頭部新增
出佇列array_shift()頭部移除並返回

二、陣列遍歷方式

1. 基本遍歷

$indexed = ['a', 'b', 'c'];
$assoc   = ['a' => 'aaaa', 'b' => 'bbbb', 'c' => 'cccc'];

// for 迴圈 (僅適用連續數值索引)
for ($i = 0; $i < count($indexed); $i++) {
    echo $indexed[$i];
}

// foreach 僅取值
foreach ($indexed as $val) { echo $val; }

// foreach 取鍵值
foreach ($assoc as $key => $val) { echo "$key => $val"; }

2. 內部指標迭代器

PHP 內部維護一個陣列指標,相關函數:

  • current()、key():取得當前元素值與鍵
  • next()、prev()、reset()、end():移動指標
  • each():返回當前鍵值並將指標前移
while (list($k, $v) = each($assoc)) {
    echo "$k => $v\n";
}

// array_walk 為每個元素執行回呼
array_walk($assoc, function($val, $key) {
    echo "walk: $key => $val\n";
});

// array_reduce 累積運算
$sumSq = array_reduce([1,2,3,4,5], function($carry, $item) {
    return $carry + $item * $item;
}, 0); // 55

三、陣列排序大全

PHP 提供三大排序維度 × 三種順序 = 9 個核心排序函數:

維度升序降序使用者自定
依鍵名排序ksort()krsort()uksort()
依值排序 (不保留鍵)sort()rsort()usort()
依值排序 (保留鍵)asort()arsort()uasort()

其他實用排序相關函數

  • array_multisort():多陣列或多維陣列同步排序
  • array_reverse():翻轉陣列,數值鍵重置
  • array_flip():交換鍵與值 (值必須唯一)
  • shuffle():隨機打亂順序

總結

熟練掌握上述函數與遍歷方式,能讓你在處理資料集時寫出更簡潔、高效的程式碼。建議在實際專案中根據資料結構特性選擇最合適的函數,並注意引用傳遞與值傳遞的差異以避免副作用。

copyright © 萬盛學電腦網 all rights reserved