php合并数组的几种方式

来源:互联网 发布:追星 知乎 编辑:程序博客网 时间:2024/06/05 08:38

+号方式

介绍

规则:当两个数组的键名是数字键名或者字符串键名可以直接 +,$c = $a + $b,在$a后追加($b$a中不存在的键名)键名和值。注意:不覆盖,只是追加不存在的键名和对应的值。键名不重新索引。无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回。

代码

这里写图片描述

array_merge

说明

规则:array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。 

代码

这里写图片描述

说明

array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。 注意:规则跟array_merge基本相同,只是在处理相同字符键名的时候,采用递归追加。

这里写图片描述

总结

对比array_merge和+以及array_merge_recursive结果的”color”的值我们可以看出:1.对于相同的字符串索引,array_merge则会用后面的值覆盖前面出现的值;+会用前面出现过的值覆盖后面相同的key;array_merge_recursive则会把相同的索引放到一个数组里面,增加数组的维度;2.对于相同的数字索引,array_merge则会给重复的值重建索引(索引值从0开始);+仍然是用前面出现过的值覆盖后面的值;array_merge_recursive和array_merge的处理方法一样。但是这只是把数组进行合并,我做合并的同时还想要去重应该怎么办呢,那就用到了另外两个函数array_flip()函数和array_keys() 函数

迭代器

参考我写的php-spl迭代器中的数组组合。