🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
数组合并成员通常有两种方式: ## 1.array_merge($arr1, $arr2, ...),至少有一个参数,且必须是数组 合并数组,以参数列表里从左到右的数组的第一层的key作为参照, 规则一: 如果key是索引【字符串的数字也算索引】,则会将索引成员的位置按先后出现的顺序进行合并重排,不会覆盖。 规则二: 如果key是字符,则后面出现的同key成员会覆盖先出现的,不同key的成员则合并进去。 规则一二是同时存在的,最终返回合并后的新数组 ``` # 纯索引 var_dump(array_merge(array('a') , array('b'))); array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } # 纯字符 var_dump(array_merge(array('name'=>'a') , array(('name'=>'b'))); array(1) { ["name"]=> string(1) "b" } # 混合 var_dump(array_merge(array('name'=>'a', 'a') , array(('name'=>'b', 'b'))); array(3) { ["name"]=> string(1) "b" [0]=> string(1) "a" [1]=> string(1) "b" } ``` ## 2.$arr1+$arr2+... 合并数组,以以参数列表里从左到右的数组的第一层的key作为参照, 规则: 不管key是索引还是字符,只要后者出现了相同key,则保留先出现的,而后者被抛弃。 ``` # 纯索引 $arr = array('a') + array('b'); var_dump($arr); array(1) { [0]=> string(1) "a" } # 纯字符 $arr = array('name'=>'a') + array(('name'=>'b'); var_dump($arr); array(1) { ["name"]=> string(1) "a" } #混合 $arr = array('name'=>'a', 'a') + array('name'=>'b', 'b'); var_dump($arr); array(2) { ["name"]=> string(1) "a" [0]=> string(1) "a" } ``` 可以看出array_merge()是以后出现的数组为基准【相同key后者优先】,先出现的作补充【不同key】 数组相加则是以先出现的为基准【相同key前者优先】,后出现的作补充【不同key】 那么在数组第一层key全是字符的情况下,两者处理数组的顺序保持逆反,就能达到同样的效果 通常使用的场景是,某个数据或者配置含有默认值,如果某项指标【key】,有了人为的配置,则以人为的优先 两者 效率如何,后续再测