今天在做项目的时候,想将多个数组进行去重合并的操作。在此前合并数组我一直用的是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_recursive和array_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() 函数移除数组中的重复的值,并返回结果数组。

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

返回的数组中键名不变。

<?php$a=array("a"=>"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() 函数返回包含数组中所有键名的一个新数组。

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

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

<?php$a=array("Volvo"=>"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));

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

PHP合并数组几种方式总结及数组去重相关推荐

  1. JavaScript数组合并的几种方式

    JavaScript用四种方式实现两个数组的合并 循环遍历(本例只用forEach和for...of) 扩展运算符 contact apply push()的定义和用法:push() 方法可向数组的末 ...

  2. js中对象合并的4种方式,数组合并的4种方法

    目录 一.对象合并 1.拓展运算符(...) 2.Object.assign() 3.递归赋值 4.jquery中的extend() 二.数组合并 1.扩展操作符 2.使用array.concat() ...

  3. 合并两个有序数组两种方式

    /*** 需求:两个有序数组nums和nums2将nums2合并到nums1中,使得nums1成为一个有序数组***/ public class Mergesz {public static void ...

  4. word文档合并的几种方式

    Word文档合并几种方式 通过com.spire.doc包 具体参考地址:https://www.e-iceblue.cn/spiredocforjavaoperating/merge-word-do ...

  5. TypeScript学习(五):数组的定义方式及常见数组操作方法使用

    上一篇我们提到了在typescript中对于对象的定义和使用,俗话说"万物皆对象",这里我们就来说一下另一个特别的对象---数组. 在网上有很多对于数组的定义,例如:数组对象是使用 ...

  6. c语言动态指针数组--一种伪二维数组

    通过动态内存分配实现c语言动态指针"数组". 其实这种结构并非是一种数组,只是手动实现的一种类似数组的结构,实现类似数组的功能.应该可以说是一种伪数组结构吧. #include & ...

  7. php多维数组合并_两种PHP二维数组合并的方式

    本文主要和大家分享第一种合并方式:通过PHP的数组API给出的array_merge方法来合并一个数组 ,希望能帮助到大家. 代码:$a = array(array("1",&qu ...

  8. PHP数组合并的几种方式

    1 "+": 直接将两个数组的值合并成为一个数组: $a = [1,2,3,'a'=>'a']; $b = ['a'=>'b',4,5,'b'=>'c',6,7, ...

  9. 请求合并的三种方式,大大提高接口性能!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://zhenbianshu.github.io/ 将相似或重复请求在上游系统中合并后发往下游系统,可以大大降低下游 ...

最新文章

  1. 一个球从100米高度自由落下,每次落地后反弹回原高度的一半; * 再落下,求在第几次之后反弹高度小于0.1米, * 并计算在这一次落地时共经过多少米?...
  2. 基于异或,取反和循环移位实现一个简单的加密解密函数
  3. SQL语句AND 和 OR执行的优先级
  4. ASP.NET Core Docker部署
  5. 王爽 汇编语言第三版 课程设计 1
  6. c语言黑白棋程序设计报告,C语言课程设计黑白棋
  7. 【面向对象】面向对象程序设计测试题1-Java语言的发展与特性测试题
  8. Shell脚本编程之(四)善用判断式
  9. 图论算法——有向图的可达性与寻路
  10. java new对象_Java中new一个对象是一个怎样的过程?JVM中发生了什么?
  11. 多维数据运算(矩阵乘法)
  12. 2021-06-22 加水印后原本EXCEL内容被覆盖
  13. AD16PCB布线规则
  14. JavaScript 小案例 弹幕
  15. CSDN博客微信登录竟然强制扫码关注登录(又来了)
  16. EGE图形库 vs配置错误解决
  17. 关于更改Python的默认工作路径
  18. 综合架构(备份部分)
  19. 智能云解析DNS健康监测是如何实现的?-中科三方
  20. 拜占庭将军问题和 Raft 共识算法讲解

热门文章

  1. java集合单向链表_Java实现单向链表数据结构
  2. java设计课程数学生数_JAVA课程设计小学数学算数测试软件.pdf
  3. [转]时序列数据库武斗大会之什么是TSDB
  4. 关于unity Assets 研究
  5. 耦合式无线充电系统设计记录_1
  6. Pannellum 360全景图片展示
  7. mybatis mybatis-plush <![CDATA[]]>时间转义字符用法
  8. cleanmymac x断网激活免费码有必要买吗
  9. 解决:微信公众号开发公司内网代理问题
  10. 二级目录部署springboot项目