陣列是 PHP 中最核心、最靈活的資料結構。掌握豐富的內建函數能讓開發事半功倍。本文分類整理陣列鍵值操作、統計去重、回調處理、排序、分割合併、堆疊佇列等實戰技巧,並以「隨機驗證碼」為例示範綜合應用。
| 函數 | 用途 | 示例 |
|---|---|---|
array_values() | 取得所有值(重新索引) | $vals = array_values($arr); |
array_keys() | 取得所有鍵 | $keys = array_keys($arr); |
in_array() | 檢查值是否存在 | in_array('php', $arr) |
array_key_exists() | 檢查鍵是否存在 | array_key_exists('name', $arr) |
array_flip() | 鍵值互換 | $flipped = array_flip($arr); |
array_reverse() | 反轉順序(值) | $rev = array_reverse($arr); |
count($arr) / sizeof($arr):元素總數。array_count_values($arr):統計每個值出現次數,回傳關聯陣列。array_unique($arr):移除重複值,保留首次出現的鍵。array_filter() 過濾<?php
$arr = ["user1"=>70, 60, 80, 78, 34, 34, 34, 56, 78, 78];
function older($var) { return $var > 60; }
$filtered = array_filter($arr, "older");
// 結果:[user1=>70, 80, 78, 78, 78] (保留原鍵)
?>
array_map() 映射轉換需修改原陣列值時,回調參數需用引用 &$val:
<?php
function increment(&$val) { $val++; }
array_map("increment", $arr); // $arr 內每個值 +1
?>
| 函數 | 順序 | 保留鍵 | 依據 |
|---|---|---|---|
sort() | 升序 | 否(重建索引) | 值 |
rsort() | 降序 | 否 | 值 |
asort() | 升序 | 是 | 值 |
arsort() | 降序 | 是 | 值 |
ksort() | 升序 | 是 | 鍵 |
krsort() | 降序 | 是 | 鍵 |
natsort() | 自然排序 | 是 | 值(如 img2.jpg < img10.jpg) |
natcasesort() | 自然排序忽略大小寫 | 是 | 值 |
array_multisort() | 多陣列/多維排序 | 視情況 | 自訂 |
<?php
$arr1 = $arr2 = ["img12.png", "img10.png", "img2.png", "img1.png"];
sort($arr1); // 標準:img1.png, img10.png, img12.png, img2.png
natsort($arr2); // 自然:img1.png, img2.png, img10.png, img12.png
?>
<?php
$arr = ["aaa", "bbbbbbbbb", "cc", "ddddd"];
$lens = [];
foreach ($arr as $v) $lens[] = strlen($v);
array_multisort($lens, SORT_ASC, $arr); // 依 $lens 排序 $arr
$lens = array_unique($lens); // 去重長度
$newArr = array_combine($lens, $arr); // 長度作鍵,標題作值
print_r($newArr);
/*
Array (
[3] => aaa
[5] => ddddd
[2] => cc
[9] => bbbbbbbbb
)
*/
?>
| 函數 | 說明 |
|---|---|
explode(',', $str) | 字串分割成陣列 |
implode('-', $arr) | 陣列合併成字串(別名 join()) |
array_slice($arr, 0, 2) | 截取片段(不改原陣列) |
array_splice($arr, 0, 3, ['x']) | 裁剪並可替換(改變原陣列) |
array_merge($a, $b) | 合併多個陣列(數字鍵重新索引,字串鍵後覆蓋前) |
array_combine($keys, $vals) | 兩陣列合併為關聯陣列 |
array_intersect($a, $b) | 交集 |
array_diff($a, $b) | 差集(以第一個陣列為基準) |
array_pop()/array_push() | 堆疊:尾部彈出/壓入 |
array_shift()/array_unshift() | 佇列:頭部移除/插入 |
array_rand($arr, 3):隨機取 3 個鍵。range(1, 100):快速建立範圍陣列。shuffle($arr):打亂順序(原地修改)。array_sum($arr):計算總和。<?php
// 1. 建立字元池:1-9, a-z, A-Z
$pool = array_merge(range(1, 9), range('a', 'z'), range('A', 'Z'));
// 2. 打亂
shuffle($pool);
// 3. 取前 4 個
$codeArr = array_slice($pool, 0, 4);
// 4. 合併為字串
$captcha = implode('', $codeArr);
echo $captcha; // 例:K7m2
?>
熟練運用這些函數,能將數十行迴圈邏輯壓縮為一行語意清晰的程式碼。建議收藏備查,實戰中多嘗試「函數式思維」替代手動迴圈。