<?php
// 索引陣列
$fruits = ['apple', 'banana', 'orange'];
// 關聯陣列
$person = ['name' => 'John', 'age' => 30, 'city' => 'Taipei'];
// 多維陣列
$matrix = [
[1, 2, 3],
[4, 5, 6]
];
?>
$a = ['apple', 'banana'];
$b = ['orange', 'grape'];
$merged = array_merge($a, $b);
// ['apple', 'banana', 'orange', 'grape']
特性: 字串鍵名後者覆蓋前者;數字鍵名重新索引。
$a = ['color' => ['red']];
$b = ['color' => ['blue']];
$merged = array_merge_recursive($a, $b);
// ['color' => ['red', 'blue']]
$keys = ['name', 'age'];
$values = ['John', 30];
$combined = array_combine($keys, $values);
// ['name' => 'John', 'age' => 30]
兩陣列長度必須相同。
$fruits = ['a', 'b', 'c', 'd', 'e'];
$slice = array_slice($fruits, 2, 2); // 從索引 2 取 2 個
// ['c', 'd']
$slice = array_slice($fruits, -3, 2); // 從倒數第 3 取 2 個
// ['c', 'd']
$fruits = ['a', 'b', 'c', 'd', 'e'];
$removed = array_splice($fruits, 2, 2); // 移除索引 2,3
// $fruits 變為 ['a', 'b', 'e']
// $removed 為 ['c', 'd']
// 替換模式
array_splice($fruits, 1, 1, ['x', 'y']);
// $fruits 變為 ['a', 'x', 'y', 'e']
$a = ['apple', 'banana', 'orange'];
$b = ['banana', 'grape', 'apple'];
array_intersect($a, $b); // ['apple', 'banana'] - 交集
array_intersect_assoc($a, $b); // 鍵值都要相同
array_diff($a, $b); // ['orange'] - 在 $a 不在 $b
array_diff_assoc($a, $b); // 鍵值都要相同
foreach ($arr as $key => $value) {
echo "$key => $value\n";
}
reset($arr);
while (list($key, $val) = each($arr)) {
echo "$key => $val\n";
}
current($arr); // 當前值
key($arr); // 當前鍵
next($arr); // 下一個
prev($arr); // 上一個
reset($arr); // 重置到第一個
end($arr); // 移到最後一個
each($arr); // 回傳當前鍵值並前進
$arr = ['a' => 'apple', 'b' => 'banana', 'c' => 'orange'];
in_array('apple', $arr); // true - 搜尋值
array_key_exists('a', $arr); // true - 搜尋鍵
array_search('banana', $arr); // 'b' - 回傳鍵
array_keys($arr); // ['a','b','c'] - 所有鍵
array_keys($arr, 'banana'); // ['b'] - 指定值的鍵
array_values($arr); // ['apple','banana','orange'] - 所有值(重新索引)
| 函數 | 操作 | 回傳 | 類比 |
|---|---|---|---|
| array_push() | 尾端推入 | 新長度 | Stack Push |
| array_pop() | 尾端彈出 | 被移除值 | Stack Pop |
| array_unshift() | 頭部推入 | 新長度 | Queue Enqueue |
| array_shift() | 頭部彈出 | 被移除值 | Queue Dequeue |
$queue = ['a', 'b'];
array_push($queue, 'c'); // ['a','b','c']
array_unshift($queue, 'x'); // ['x','a','b','c']
$first = array_shift($queue); // 'x', $queue=['a','b','c']
$last = array_pop($queue); // 'c', $queue=['a','b']
| 函數 | 排序依據 | 保持鍵名關聯 |
|---|---|---|
| sort() | 值 | 否(重新索引) |
| rsort() | 值(降序) | 否 |
| asort() | 值 | 是 |
| arsort() | 值(降序) | 是 |
| ksort() | 鍵 | 是 |
| krsort() | 鍵(降序) | 是 |
| natsort() | 自然排序 | 是 |
| usort() | 自訂比較函數 | 否 |
| uasort() | 自訂比較函數 | 是 |
| uksort() | 自訂鍵比較 | 是 |
// 多維陣列排序
$users = [
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25]
];
array_multisort(array_column($users, 'age'), SORT_ASC, $users);
array_unique($arr); // 移除重複值
array_reverse($arr); // 反轉順序
array_flip($arr); // 鍵值互換
array_count_values($arr); // 統計值出現次數
array_fill(0, 5, 'x'); // 建立填充陣列 ['x','x','x','x','x']
array_column($arr, 'name'); // 取出多維陣列某欄位
array_map('strtoupper', $arr); // 對每元素套用函數
array_filter($arr, fn($v) => $v > 10); // 過濾
array_reduce($arr, fn($c, $v) => $c+$v, 0); // 歸約求和
shuffle($arr); // 隨機打亂
range(1, 10, 2); // [1,3,5,7,9]
foreach,比 while/each 快約 20-30%while/each 或 for 迴圈count($arr),預先存入變數SplFixedArray 節省記憶體熟練掌握這些陣列函數,能讓 PHP 資料處理更簡潔高效。