本篇重點
- 陣列的自定義鍵值和流水號鍵值
- array + array、array_merge()、array_replace() 的使用方式和差異
陣列的自定義鍵值和流水號鍵值
陣列的鍵值可以是自定義的字符串或整數,也可以是預設的流水號鍵值
自定義鍵值
使用有意義的鍵來標識陣列中的元素
1 2 3 4 5
| $customArray = [ 'name' => 'Alice', 'age' => 25, 'city' => 'New York' ];
|
流水號鍵值
從 0 開始遞增的整數鍵值。沒有指定鍵時,PHP 會自動生成預設的流水號鍵值
1
| $defaultArray = ['Apple', 'Banana', 'Cherry'];
|
同時使用自定義鍵值和流水號鍵值
1 2 3 4 5 6 7
| $mixedArray = [ 'name' => 'Bob', 'age' => 30, 'colors' => ['Red', 'Green', 'Blue'], '2' => 'two', 1 => 1 ];
|
鍵值重複
同一個陣列中使用相同的鍵值,後面定義的值會覆蓋前面的值。
1 2 3 4 5
| $duplicateArray = [ 'name' => 'Bob', 'name' => 'Tom', 'age' => 30, ];
|
陣列合併應用
array + array
- 保留第一組陣列的所有鍵值對
- 添加第二組陣列中不在第一組陣列的鍵值對
- 如果兩個陣列有相同的鍵值(不管字串或數字的鍵值),則保留第一組陣列的鍵值對
- 如果合併的時候有流水號鍵值,則保持原順序,不會重新排序
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| $array1 = ['a' => 1, 'b' => 2]; $array2 = ['b' => 3, 'c' => 4]; $result1 = $array1 + $array2;
print_r($result1); Array ( [a] => 1 [b] => 2 [c] => 4 )
$array3 = [0 => 'Apple', 3 => 'Banana']; $array4 = [0 => 'Cherry', 2 => 'Grap']; $result2 = $array3 + $array4;
print_r($result2); Array ( [0] => Apple [3] => Banana [2] => Grap )
$array5 = [0 => 'Apple', 'b' => 23, 3 => 'Banana']; $array6 = ['e' => 66, 'Cherry', 'Grap']; $result3 = $array5 + $array6;
print_r($result3); Array ( [0] => Apple ['b'] => 23 [3] => Banana ['e'] => 66 [1] => Grap )
|
array_merge()
- 合併一組或多組陣列
- 保留所有參與合併陣列的鍵值對
- 如果有相同的鍵值 (不是數字的鍵值),後面陣列的鍵值對會覆蓋前面的鍵值對
- 如果合併的時候有數字或流水號鍵值,則重新排序 (從0開始遞增)
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| $array1 = ['a' => 1, 'b' => 2]; $array2 = ['b' => 3, 'c' => 4]; $result1 = array_merge($array1, $array2);
print_r($result1); Array ( [a] => 1 [b] => 3 [c] => 4 )
$array3 = [0 => 'Apple', 3 => 'Banana']; $array4 = [0 => 'Cherry', 2 => 'Grap']; $result2 = array_merge($array3, $array4);
print_r($result2); Array ( [0] => Apple [1] => Banana [2] => Cherry [3] => Grap )
$array5 = [0 => 'Apple', 'b' => 23, 3 => 'Banana']; $array6 = ['e' => 66, 'Cherry', 'Grap']; $result3 = array_merge($array5, $array6);
print_r($result3); Array ( [0] => Apple [b] => 23 [1] => Banana [e] => 66 [2] => Cherry [3] => Grap )
|
array_replace()
- 合併一組或多組陣列
- 添加後面陣列中不在第一組陣列的鍵值對
- 如果有相同的鍵值 (不管字串或數字的鍵值),後面陣列的鍵值對會覆蓋前面的鍵值對
- 如果合併的時候有流水號鍵值,則保持原順序,不會重新排序
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| $array1 = ['a' => 1, 'b' => 2]; $array2 = ['b' => 3, 'c' => 4]; $result1 = array_replace($array1, $array2);
print_r($result1); Array ( [a] => 1 [b] => 3 [c] => 4 )
$array3 = [0 => 'Apple', 3 => 'Banana']; $array4 = [0 => 'Cherry', 2 => 'Grap']; $result2 = array_replace($array3, $array4);
print_r($result2); Array ( [0] => Cherry [3] => Banana [2] => Grap )
$array5 = [0 => 'Apple', 'b' => 23, 3 => 'Banana']; $array6 = ['e' => 66, 'Cherry', 'Grap']; $result3 = array_replace($array5, $array6);
print_r($result3); Array ( [0] => Cherry [b] => 23 [3] => Banana [e] => 66 [1] => Grap )
|
array + array、array_merge()、array_replace()
相互比較
合併組數
1
| $result = $array1 + $array2;
|
1
| $result = array_merge($array1, $array2, $array3, ...);
|
1
| $result = array_replace($array1, $array2, $array3, ...);
|
相同鍵值時,鍵值對的覆蓋方式
array + array
:- 不論是字符串鍵值還是數字鍵值,保留第一組陣列的鍵值對,不會被後面的鍵值對覆蓋
array_merge()
:- 字符串鍵值:後面陣列的鍵值對會覆蓋前面的鍵值對
- 數字鍵值:後面陣列的值會追加到結果陣列中,不覆蓋前面的鍵值對
array_replace()
:- 不論是字符串鍵值還是數字鍵值,後面陣列的鍵值對都會覆蓋前面的鍵值對
合併數字鍵值時,鍵值排序方式
array + array
:保持數字鍵值的原順序,不會重新排序
1 2 3 4 5 6 7 8 9 10 11 12
| $array1 = [0 => 'Apple', 2 => 'Banana']; $array2 = [2 => 'Cherry', 4 => 'Grap']; $result = $array1 + $array2;
print_r($result); Array ( [0] => Apple [2] => Banana [4] => Grap )
|
array_merge()
:數字鍵值會重新索引,從0開始遞增
1 2 3 4 5 6 7 8 9 10 11 12 13
| $array1 = [0 => 'Apple', 2 => 'Banana']; $array2 = [2 => 'Cherry', 4 => 'Grap']; $result = array_merge($array1, $array2);
print_r($result); Array ( [0] => Apple [1] => Banana [2] => Cherry [3] => Grap )
|
array_replace()
:保持數字鍵值的原順序,不會重新排序
1 2 3 4 5 6 7 8 9 10 11 12
| $array1 = [0 => 'Apple', 2 => 'Banana']; $array2 = [2 => 'Cherry', 4 => 'Grap']; $result = array_replace($array1, $array2);
print_r($result); Array ( [0] => Apple [2] => Cherry [4] => Grap )
|
總結
array + array、array_merge()、array_replace()
三種合併陣列的方式,各自有相似的地方,但是執行結果有些許差異。
我很常會忘記它們各自的差異,所以需要陣列合併的時候會不知道要使用哪個方式,希望透過這篇整理可以幫助到我跟有同樣困擾的人😂