PHP 陣列實為**有序映射**,同時支援整數索引與字串鍵名,可作為列表、關聯陣列、雜湊表、堆疊、佇列使用。
<?php
// 短語法 (PHP 5.4+)
$arr = []; // 空陣列
$arr = ['a', 'b', 'c']; // 索引陣列:0=>a, 1=>b, 2=>c
$arr = ['id' => 1, 'name' => 'John']; // 關聯陣列
// array() 函數 (所有版本)
$arr = array('a', 'b', 'c');
$arr = array('id' => 1, 'name' => 'John');
// 自動索引補充
$arr = [3 => 'a', 5 => 'b']; // 指定索引
$arr[] = 'c'; // 自動接在最大整數索引後 → 6 => 'c'
// 字串鍵名
$arr = ['user_name' => 'John', 'email' => 'john@example.com'];
echo $arr['user_name']; // John
<?php
// 二維陣列:使用者列表
$users = [
['id' => 1, 'name' => 'Alice', 'roles' => ['admin', 'editor']],
['id' => 2, 'name' => 'Bob', 'roles' => ['user']],
];
// 存取
echo $users[0]['name']; // Alice
echo $users[1]['roles'][0]; // user
// 三維以上
$matrix = [
[[1,2], [3,4]],
[[5,6], [7,8]]
];
echo $matrix[1][0][1]; // 6
$arr = [];
$arr[] = 'a'; // 推入末尾
$arr['key'] = 'value'; // 指定鍵名
$arr = array_merge($arr, ['x' => 1, 'y' => 2]); // 合併
unset($arr['key']); // 刪除指定鍵
array_splice($arr, 1, 1); // 刪除索引 1 並重新索引
array_shift($arr); // 移除首元素並重新索引
array_pop($arr); // 移除尾元素
isset($arr['key']); // 鍵存在且非 null
array_key_exists('key', $arr); // 鍵存在 (含 null 值)
in_array('value', $arr); // 值存在 (嚴格模式第3參數 true)
array_search('value', $arr); // 回傳鍵名
array_keys($arr); // 所有鍵名
array_values($arr); // 所有值 (重新索引)
$arr = [3, 1, 2];
sort($arr); // [1,2,3] 重新索引
rsort($arr); // [3,2,1]
$assoc = ['b'=>2, 'a'=>1, 'c'=>3];
ksort($assoc); // 按鍵排序 ['a'=>1,'b'=>2,'c'=>3]
krsort($assoc); // 反向
asort($assoc); // 按值排序保留鍵
arsort($assoc); // 反向
// 多維排序
usort($users, fn($a,$b) => $a['id'] <=> $b['id']); // 太空船運算子 PHP 7+
array_multisort(array_column($users, 'name'), SORT_ASC, $users);
<?php
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
// foreach (最常用)
foreach ($arr as $key => $value) {
echo "$key => $value\n";
}
// 參考修改
foreach ($arr as &$value) {
$value *= 2;
}
unset($value); // 重要:解除參考,避免後續誤用
// while + each (舊式,不推薦)
while (list($key, $value) = each($arr)) { ... }
// array_walk (修改原陣列)
array_walk($arr, function(&$v, $k) { $v = strtoupper($v); });
// array_map (回傳新陣列)
$upper = array_map('strtoupper', $arr);
<?php
// 模擬 SQL 查詢結果
$rawRows = [
['id' => 1, 'name' => 'Product A', 'price' => 100, 'category_id' => 10],
['id' => 2, 'name' => 'Product B', 'price' => 200, 'category_id' => 10],
['id' => 3, 'name' => 'Product C', 'price' => 150, 'category_id' => 20],
];
// 1. 分組:按分類整理
$byCategory = [];
foreach ($rawRows as $row) {
$cid = $row['category_id'];
$byCategory[$cid][] = $row;
}
// 2. 計算統計
$stats = [];
foreach ($byCategory as $cid => $products) {
$stats[$cid] = [
'count' => count($products),
'total_price' => array_sum(array_column($products, 'price')),
'avg_price' => array_sum(array_column($products, 'price')) / count($products),
'products' => $products
];
}
// 3. 輸出 HTML
echo '<ul>';
foreach ($stats as $cid => $stat) {
echo "<li>分類 $cid: {$stat['count']} 項, 平均價 {$stat['avg_price']}</li>";
echo '<ul>';
foreach ($stat['products'] as $p) {
echo "<li>{$p['name']} - \${$p['price']}</li>";
}
echo '</ul>';
}
echo '</ul>';
[$a, $b, $c] = [1, 2, 3]; // $a=1, $b=2, $c=3
['id' => $id, 'name' => $name] = ['id' => 1, 'name' => 'John']; // 關聯解構
// 忽略某些值
[, , $third] = [1, 2, 3]; // $third = 3
$a = [1, 2, 3];
$b = [3, 4, 5];
array_merge($a, $b); // [1,2,3,3,4,5] 保留重複
array_unique($a); // 去重
array_diff($a, $b); // [1,2] 在 a 不在 b
array_intersect($a, $b); // [3] 交集
| 功能 | 函數 | 說明 |
|---|---|---|
| 計數 | count() | 元素個數 |
| 翻轉 | array_flip() | 鍵值互換 |
| 反轉 | array_reverse() | 順序反轉 |
| 切片 | array_slice() | 取片段 (不重新索引加 true) |
| 切割/替換 | array_splice() | 修改原陣列 |
| 欄位提取 | array_column() | 提取多維陣列單欄 |
| 鍵名轉小寫 | array_change_key_case() | CASE_LOWER/CASE_UPPER |
| 隨機取樣 | array_rand() | 取隨機鍵名 |
| 打亂 | shuffle() | 原地打亂 |
熟練掌握陣列操作,是 PHP 高效開發的核心技能之一。