array_merge() 將一或多個陣列合併,**字串鍵相同者後者覆蓋前者**,**數字鍵則重新從 0 開始連續編號**。
<?php
$first = ["aa", "bb", "cc"]; // 數字索引 0,1,2
$second = [11, 22, 33]; // 數字索引 0,1,2
$merged = array_merge($first, $second);
foreach ($merged as $val) echo "$val<br>";
/* 輸出:
aa
bb
cc
11
22
33
*/
// 結果陣列索引為 0,1,2,3,4,5(重新排序)
?>
$a = ['x' => 1, 'y' => 2];
$b = ['y' => 99, 'z' => 3];
print_r(array_merge($a, $b));
/* 結果:
Array
(
[x] => 1
[y] => 99 ← $b 覆蓋 $a
[z] => 3
)
*/
$a = [5 => 'a', 7 => 'b'];
$b = [1 => 'c'];
print_r(array_merge($a, $b));
/* 結果:
Array
(
[0] => 'a' ← 原鍵 5 變 0
[1] => 'b' ← 原鍵 7 變 1
[2] => 'c' ← 原鍵 1 變 2
)
*/
$a + $b 保留左側鍵值,右側同鍵**不覆蓋**。| 函數/運算子 | 字串鍵衝突 | 數字鍵處理 | 遞迴 |
|---|---|---|---|
| array_merge | 後者覆蓋 | 重新編號 (0...) | 否 |
| array_merge_recursive | 合併為陣列 | 重新編號 | 是 |
| array_replace | 後者覆蓋 | **保留原鍵** | 是 |
| $a + $b | **左側優先** | **保留原鍵** | 否 |
理解 array_merge() 的鍵值處理規則對避免資料遺失至關重要。需保留數字索引時請用 array_replace() 或 +;需遞迴合併多維陣列用 array_merge_recursive() 或 array_replace_recursive()。