PHP中,有3種方法來進行數組合並:操作符(+)、array_merge、array_merge_recursive,其中前兩種方式為一維數組的合並,第三種為遞歸合並。
在說PHP的數組合並之前,先要明白,PHP的數組分為索引數組和關聯數組。索引數組是指沒有鍵值和鍵值為數字的數組,關聯數組是指鍵值為字符的數組。
下面說說操作符(+)和array_merge的區別:
1.當為索引數組時,合並相同鍵值的數組,操作符以最前面的值為合並後的結果,array_merge則是把相同鍵值的數組合並,並重新索引(不同鍵值的數組合並時,也會從0開始重新生成數字索引)。
1、“+”運算符
規則:
當兩個數組的鍵名是數字鍵名或者字符串鍵名
$c = $a + $b
在$a後追加($b在$a中不存在的鍵名)鍵名和值
注意:
1、不覆蓋,只是追加不存在的鍵名和對應的值
2、鍵名不重新索引
3、無論是全部數字鍵名還是混合,都只是追加鍵名和值,如果鍵名相同則不進行追加,即把最先出現的值作為最終結果返回
例1:數字鍵名
$a = array(
'a',
);
$b = array(
'u',
);
$c = $a + $b;
var_dump($c);
output:
array(1) {
[0]=>
string(1) "a"
}
例2:數字鍵名
$a = array(
66=>'a',
);
$b = array(
60=>'u',
66=>'c'
);
$c = $a + $b;
var_dump($c);
output:
array(2) {
[66]=>
string(1) "a"
[60]=>
string(1) "u"
}
例3:字符鍵名
<?php
$a = array(
1=>'a',
2=>'b',
'c'=>'c',
'd'=>'d',
);
$b = array(
1=>'u',
3=>'v',
'c'=>'w',
'd'=>'x',
'y'=>'y',
60=>'z',
);
$c = $a + $b;
var_dump($c);
?>
output:
array(7) {
[1]=>
string(1) "a"
[2]=>
string(1) "b"
["c"]=>
string(1) "c"
["d"]=>
string(1) "d"
[3]=>
string(1) "v"
["y"]=>
string(1) "y"
[60]=>
string(1) "z"
}
2.當為關聯數組時,合並相同字符鍵值的數組,操作符合並規則是前面的覆蓋後面的,array_merge則是後面的覆蓋前面的。
例:
代碼如下 復制代碼$arr5 = array('a'=>'aaaa');
$arr6 = array('a'=>'bbbb');
var_dump($arr5+$arr6);
var_dump(array_merge($arr5,$arr6));
輸出:
array (size=1)
'a' => string 'aaaa' (length=4)
array (size=1)
'a' => string 'bbbb' (length=4)
array_merge() 將一個或多個PHP數組合並起來,一個數組中的值附加在前一個數組的後面。返回作為結果的數組。
如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引。
3.array_merge_recursive的合並規則和array_merge相同,只是array_merge_recursive支持多維數組的合並。
例:
代碼如下 復制代碼$a = array(
1=>'a',
2=>'b',
'c'=>'c',
'd'=>'d',
);
$b = array(
1=>'u',
3=>'v',
'c'=>'w',
'd'=>'x',
'y'=>'y',
60=>'z',
);
var_dump(array_merge_recursive($a,$b));
輸出:
array (size=8)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
'c' =>
array (size=2)
0 => string 'c' (length=1)
1 => string 'w' (length=1)
'd' =>
array (size=2)
0 => string 'd' (length=1)
1 => string 'x' (length=1)
2 => string 'u' (length=1)
3 => string 'v' (length=1)
'y' => string 'y' (length=1)
4 => string 'z' (length=1)