php数组合并有哪三种方法
一、总结
一句话总结:array_merge();array_merge_recursive();‘+\'号
$a = array(\'color\'=>\'red\',5,6); $b = array(\'color\'=>\'blue\',\'type\'=>\'fruit\',6,7);
1、array_merge()方式合并数组的特点是什么?
(array_merge()合并数组会把前一个数组中关联形式数组的键值相同的覆盖,索引形式的则按键值顺序合并在一起)
2、array_merge()方式合并数组和array_merge_recursive()合并数组的区别是什么?
array_merge()合并数组会把前一个数组中关联形式数组的键值相同的覆盖,索引形式的则按键值顺序合并在一起
array (size=6) \'color\' => string \'blue\' (length=4) 0 => int 5 1 => int 6 \'type\' => string \'fruit\' (length=5) 2 => int 6 3 => int 7
array_merge_recursive()函数会把键值相同的值以一个新的关联数组的形式返回,并以这个键值作为二维数组的键值,其他索引形式则不会受影响。
array (size=6) \'color\' => array (size=2) 0 => string \'red\' (length=3) 1 => string \'blue\' (length=4) 0 => int 5 1 => int 6 \'type\' => string \'fruit\' (length=5) 2 => int 6 3 => int 7
3、‘+\'号合并数组的霸道之处在哪里?
使用‘+\'号合并数组,是前面覆盖后面的,和array_merge()相反,而且它比array_merge()更狠,如果以索引形式出现的数组的内容,合并后如果键值相同也会覆盖掉!
array (size=4) \'color\' => string \'red\' (length=3) 0 => int 5 1 => int 6 \'type\' => string \'fruit\' (length=5)
4、array_merge()方式合并数组和‘+\'号合并数组的区别是什么?
a、array_merge()后面覆盖前面,‘+\'号前面覆盖后面
b、array_merge()索引会按顺序排列(不会被覆盖),‘+\'号索引前面会覆盖后面
二、php数组合并有哪三种方法
在此前合并数组我一直用的是array_merge()这个函数,但今天我百度了一下,原来还有‘+\'号,
array_merge_recursive() ,也是可以用来合并数组的,根据我的记忆,我把那道题写出来看一下:
|
1
2
3
4
|
$a = array(\'color\'=>\'red\',5,6);
$b = array(\'color\'=>\'blue\',\'type\'=>\'fruit\',6,7);
$arr = array_merge($a,$b);
var_dump($arr);
|
|
1
2
3
4
5
6
7
|
array (size=6)
\'color\' => string \'blue\' (length=4)
0 => int 5
1 => int 6
\'type\' => string \'fruit\' (length=5)
2 => int 6
3 => int 7
|
要求是在不使用array_merge()的情况的得到相同的效果;
(array_merge()合并数组会把前一个数组中关联形式数组的键值相同的覆盖,索引形式的则按键值顺序合并在一起)
1.先用array_merge_recursive()函数来合并一下:
|
1
2
3
4
|
$a = array(\'color\'=>\'red\',5,6);
$b = array(\'color\'=>\'blue\',\'type\'=>\'fruit\',6,7);
$arr = array_merge_recursive($a,$b);
var_dump($arr);
|
输出结果:
|
1
2
3
4
5
6
7
8
9
10
|
array (size=6)
\'color\' =>
array (size=2)
0 => string \'red\' (length=3)
1 => string \'blue\' (length=4)
0 => int 5
1 => int 6
\'type\' => string \'fruit\' (length=5)
2 => int 6
3 => int 7
|
从结果可以看出array_merge_recursive()函数会把键值相同的值以一个新的关联数组的形式返回,并以这个键值作为二维数组的键值,其他索引形式则不会受影响。
比起array_merge()的话就不会出现后面的数组键和前一个相同就把前一个的值覆盖的情况了。
2.再看下‘+\'号合并数组的情况:
|
1
2
3
4
|
$a = array(\'color\'=>\'red\',5,6);
$b = array(\'color\'=>\'blue\',\'type\'=>\'fruit\',6,7);
$arr = $a+$b;
var_dump($arr);
|
输出结果:
|
1
2
3
4
5
|
array (size=4)
\'color\' => string \'red\' (length=3)
0 => int 5
1 => int 6
\'type\' => string \'fruit\' (length=5)
|
从这个结果可以看出,使用‘+\'号合并数组,是前面覆盖后面的,和array_merge()相反,而且它比array_merge()更狠,如果以索引形式出现的数组的内容,合并后如果键值相同也会覆盖掉!