博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP合并数组几种方式总结
阅读量:5282 次
发布时间:2019-06-14

本文共 2502 字,大约阅读时间需要 8 分钟。

今天在做项目的时候,想将多个数组进行去重合并的操作。在此前合并数组我一直用的是array_merge()这个函数,今天我百度了一下,原来还有‘+'号,和array_merge_recursive函数。

 

下面是一段对比的代码

$array1 = array(2,4,"color" => "red");    $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);    $result = array_merge($array1, $array2);    echo "----------------array_merge---------------".PHP_EOL;    print_r($result);    echo "----------------+++++++++++---------------".PHP_EOL;    print_r($array1+$array2);    echo "----------------array_merge_recursive---------------".PHP_EOL;    print_r(array_merge_recursive($array1,$array2));

 

 

结果如下所示

----------------array_merge---------------Array(    [0] => 2    [1] => 4    [color] => green    [2] => a    [3] => b    [shape] => trapezoid    [4] => 4)----------------+++++++++++---------------Array(    [0] => 2    [1] => 4    [color] => red    [shape] => trapezoid    [2] => 4)----------------array_merge_recursive---------------Array(    [0] => 2    [1] => 4    [color] => Array        (            [0] => red            [1] => green        )     [2] => a    [3] => b    [shape] => trapezoid    [4] => 4)

 

 

对比array_merge+以及array_merge_recursive结果的”color”的值我们可以看出:

1.对于相同的字符串索引,
array_merge则会用后面的值覆盖前面出现的值;
+会用前面出现过的值覆盖后面相同的key;
array_merge_recursive则会把相同的索引放到一个数组里面,增加数组的维度;
2.对于相同的数字索引,
array_merge则会给重复的值重建索引(索引值从0开始);
+仍然是用前面出现过的值覆盖后面的值;
array_merge_recursivearray_merge的处理方法一样。

 

但是这只是把数组进行合并,我做合并的同时还想要去重应该怎么办呢,那就用到了另外两个函数array_flip()函数array_keys() 函数

 

 

要讲到数组合并与去重,这里就不得不提array_flip()函数,而这个函数也是数组键值的翻转函数。

 

For example:

 

$arr=array('10','11','12');$arr2=array('12','13','14');$arr3=array('14','15','16'); print_r(array_flip($arr)+array_flip($arr2)+array_flip($arr3));output:Array ( [10] => 0 [11] => 1 [12] => 2 [13] => 1 [14] => 2 [15] => 1 [16] => 2 )

 

 

1.单数组去重复

array_unique($arrTest)

array_unique() 函数移除数组中的重复的值,并返回结果数组。

当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。

返回的数组中键名不变。

"red","b"=>"green","c"=>"red");print_r(array_unique($a));?>运行结果:Array ( [a] => red [b] => green )

 

 

 

 

//2.多数组去重复

    array_keys(array_flip($arr1)+array_flip($arr2))

array_keys() 函数返回包含数组中所有键名的一个新数组。

如果提供了第二个参数,则只返回键值为该值的键名。

返回包含数组中所有键名的一个新数组:

"XC90","BMW"=>"X5","Toyota"=>"Highlander");print_r(array_keys($a));?>运行结果:Array ( [a] => red [b] => green )Array ( [0] => Volvo [1] => BMW [2] => Toyota )

 

 

 

 

对多个数组合并去重技巧

$a = array('1001','1002');$b = array('1002','1003','1004');$c = array('1003','1004','1005');$d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));

 

 

 

结合上边这些函数的分析和使用,相信以后日常对数组合并已经基本不成问题了。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/lcss/p/7757784.html

你可能感兴趣的文章
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>
2019-8-5 考试总结
查看>>
JS中实现字符串和数组的相互转化
查看>>
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
CS61A Efficiency 笔记
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
Elasticsearch 滚动重启 必读
查看>>
Hadoop基本概念
查看>>
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
查看>>
浅说 apache setenvif_module模块
查看>>
MySQL--数据插入
查看>>
重新学习python系列(二)? WTF?
查看>>
shell脚本统计文件中单词的个数
查看>>