array_merge函数的详细用法

2019年12月05日 23:20

merge是合并的意思,但就array_merge的实际用法,我们理解成追加的意思则更为贴切。


array_merge函数,就是给一个数组,追加其它数组的元素。

既然是追加的含义,自然是原本的数组在前,追加的数组在后了。


其中主要的注意点:

1、整型key值的变化规律

2、遇到相同key值,value的变化

3、遇到追加数组是null的情形


下面就通过代码和执行结果来了解array_merge函数的特点。


实例1:

$main_arr = array(1 =>"hello",  3=>"world");
$add_arr  = array("author" => "翟码农", 5=>"sex:male",  4=> "age:30");
$result   = array_merge($add_arr, $main_arr);
var_dump($result);

结果:

array(5) { 
	["author"]=> string(9) "翟码农" 
	[0]=> string(8) "sex:male" 
	[1]=> string(6) "age:30" 
	[2]=> string(5) "hello" 
	[3]=> string(5) "world" 
}

我本以为索引为0的元素,会是age:30这个元素。

由结果可以看出,$main_arr就是追加到$add_arr之后的效果,整型key值重新按赋值顺序生成。


结论:最终数字key值是根据赋值顺序来的,而不是根据原本int型键值大小排序来的


实例2:

将上面两个数组调换位置。
$main_arr = array(1 =>"hello",  3=>"world");
$add_arr  = array("author" => "翟码农", 5=>"sex:male",  4=> "age:30");
$result   = array_merge($main_arr, $add_arr);
var_dump($result);
结果:
array(5) { 
	[0]=> string(5) "hello" 
	[1]=> string(5) "world" 
	["author"]=> string(9) "翟码农" 
	[2]=> string(8) "sex:male" 
	[3]=> string(6) "age:30" 
}
结论同实例1,就不赘言了。

实例3:

两个数组,有个相同的key值3.
$main_arr = array(1 =>"hello",  3=>"world");
$add_arr  = array("author" => "翟码农", 5=>"sex:male",  4=> "age:30", 3=>"爱生活");
$result   = array_merge($main_arr, $add_arr);
var_dump($result);
结果:
array(6) { 
	[0]=> string(5) "hello" 
	[1]=> string(5) "world" 
	["author"]=> string(9) "翟码农" 
	[2]=> string(8) "sex:male" 
	[3]=> string(6) "age:30" 
	[4]=> string(9) "爱生活" 		
} 
world值仍然存在,并没有被后面追加的“爱生活”覆盖。
给键值3用单引号包起来,结果仍是一样。

把上面key值3改成test,如下:
$main_arr = array(1 =>"hello",  'test'=>"world");
$add_arr  = array("author" => "翟码农", 5=>"sex:male",  4=> "age:30", 'test'=>"爱生活");
$result   = array_merge($main_arr, $add_arr);
var_dump($result);
结果:
array(5) { 
	[0]=> string(5) "hello" 
	["test"]=> string(9) "爱生活" 
	["author"]=> string(9) "翟码农" 
	[1]=> string(8) "sex:male" 
	[2]=> string(6) "age:30" 
}
此时可发现,原本数组中world值被追加数组中同样test的key值对应的value替换了。

结论:只有当数组key值是字符串时,相同key值,追加数组中的元素才会替换原本数组中的元素。


实例4:

当追加数组是null时。
$main_arr = array(1 =>"hello",  3=>"world");
$result   = array_merge($main_arr, null);
var_dump($result);
结果:
Warning: array_merge(): Argument #2 is not an array 
NULL
结果会有警告,并且还是null。

实际开发过程中,即使追加数组为空,我们仍然希望array_merge后至少仍然能够返回原本数组中的值。

如何解决?
在追加数组前加个array强制转换就好了。
$main_arr = array(1 =>"hello",  3=>"world");
$add_arr  = null;
$result   = array_merge($main_arr, (array)$add_arr);

本文是翟码农个人博客蓝翟红尘里php分类下的文章,转载请注明出处:http://www.zhai14.com/blog/detail-use-of-array-merge.html

  • 2019年12月05日 23:15文章创建
  • 2019年12月05日 23:20文章发布
我要评论
«-必填,限2-20个字符,中文/字母/字母数字组合
«-评论后,邮箱会收到激活链接,未激活邮箱的留言,将无法显示
评论列表
暂无评论,期待你的评论哦!
回到顶部