PHP array_merge 与 + 的区别

最近上线,遇到一个问题:根据语言区域不同,获取的数据信息一直只有某一个区域的,其他区域的数据都没了。吓了我一大跳,赶紧开启debug模式。最终发现是没有搞清array_merge 与 + 的区别导致的bug。

        首先需要说明的是,array_merge 与 + 号都可以合并数组,但二者是有所不同的:对于+,当key相同时,不管key是字符还是数组,都是舍弃后面的结果; 
array_merge ,当key相同时,key是字符,则后面的覆盖前面的;key是数字,则不发生覆盖,会重新建立数组索引。

<?php$arr1 = array('a'=>'阿拉伯语');$arr2 = array('a'=>'印度语言');//键名为字符,键名相同,array_merge()后面数组元素值会覆盖前面数组元素值print_r(array_merge($arr1,$arr2)); //键名为字符,键名相同,数组相加会将最先出现的值作为结果print_r($arr1+$arr2); ?>

得到的结果是:

如果key是数字,则得到的结果如下:

出现bug的原因是,使用的是+号进行数组合并,数组对应的key是数字,这一会导致只返回第一个语言区域的数据,而其他语言区域的数据全部都忽略了,从而导致获取不到所有数据。

需要说明的是,如果想最有效的获取字符键名相同,值不同的两个数组值集合,可以直接使用array_merge_recursive,它能递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,那么这些值会被合并到一个数组中去收录于话题 #bug解决3个下一篇支付宝支付 notify_url 没有被调用,一直没有异步通知

Sea Bridge

古之立大志者,不惟有超世之才 亦必有坚韧不拔之志!

发表评论