常用的合并数组方法有以下几种:

1  array_merge

2  '+'

3  array_merge_recursive

下面是一段对比的代码

  1. $array1 = array(2,4,"color" => "red");
  2.  
  3. $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
  4.  
  5. $result = array_merge($array1, $array2);
  6.  
  7. echo "----------------array_merge---------------".PHP_EOL;
  8.  
  9. print_r($result);
  10.  
  11. echo "----------------+++++++++++---------------".PHP_EOL;
  12.  
  13. print_r($array1+$array2);
  14.  
  15. echo "----------------array_merge_recursive---------------".PHP_EOL;
  16.  
  17. print_r(array_merge_recursive($array1,$array2));

结果如下所示

  1. ----------------array_merge---------------Array(
  2.  
  3. [0] => 2
  4.  
  5. [1] => 4
  6.  
  7. [color] => green
  8.  
  9. [2] => a
  10.  
  11. [3] => b
  12.  
  13. [shape] => trapezoid
  14.  
  15. [4] => 4)----------------+++++++++++---------------Array(
  16.  
  17. [0] => 2
  18.  
  19. [1] => 4
  20.  
  21. [color] => red
  22.  
  23. [shape] => trapezoid
  24.  
  25. [2] => 4)----------------array_merge_recursive---------------Array(
  26.  
  27. [0] => 2
  28.  
  29. [1] => 4
  30.  
  31. [color] => Array
  32.  
  33. (
  34.  
  35. [0] => red
  36.  
  37. [1] => green
  38.  
  39. )
  40.  
  41. [2] => a
  42.  
  43. [3] => b
  44.  
  45. [shape] => trapezoid
  46.  
  47. [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:

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

1.单数组去重复

array_unique($arrTest)

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

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

返回的数组中键名不变。

  1. <?php
  2.  
  3. $a=array("a"=>"red","b"=>"green","c"=>"red");
  4.  
  5. print_r(array_unique($a));
  6.  
  7. ?>
  8.  
  9. 运行结果:Array ( [a] => red [b] => green )

//2.多数组去重复

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

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

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

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

  1. <?php
  2.  
  3. $a=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
  4.  
  5. print_r(array_keys($a));
  6.  
  7. ?>
  8.  
  9. 运行结果:Array ( [a] => red [b] => green )
  10.  
  11. Array ( [0] => Volvo [1] => BMW [2] => Toyota )

对多个数组合并去重技巧

  1. $a = array('1001','1002');
  2.  
  3. $b = array('1002','1003','1004');
  4.  
  5. $c = array('1003','1004','1005');
  6.  
  7. $d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));

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

数组合并--php的更多相关文章

  1. go语言:多个[]byte数组合并成一个[]byte

    场景:在开发中,要将多个[]byte数组合并成一个[]byte,初步实现思路如下: 1.获取多个[]byte长度 2.构造一个二维码数组 3.循环将[]byte拷贝到二维数组中 package gst ...

  2. 论php数组合并

    注:尽量不要在循环中操作数据库. 1.两个一维数组合并成一个一维数组 $a = array('morning','afternoon','night'); $b = array('breakfast' ...

  3. PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧

    PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的! 主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 ...

  4. JS数组键值,数组合并,

    eg: var arr = [] arr.test = '测试'; arr.push(1); arr.push(2); arr.obj = '对象'; console.log(arr);// [ 1, ...

  5. PHP数组合并 array_merge 与 + 的差异

    在PHP数组合并出过几次问题都没记住,写下来加强一点记忆 PHP数组在合并时,使用 array_merge 与 + 的差异: 1.array_merge(array $array1 [, array  ...

  6. Python数组合并

    Python数组合并 a = [1, 2] b = [3, 4] c = a + b print(c) # [1, 2, 3, 4]

  7. PHP数组合并的常见问题

    一维数组的合并 <?php $arr1=array("a","b","c"); $arr2=array("c",& ...

  8. php二位数组合并

    转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...

  9. PHP中数组合并的两种方法及区别介绍

    PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...

  10. 华为OJ平台——整形数组合并

    题目描述: 将两个整型数组按照升序合并,并且过滤掉重复数组元素 输入: 输入说明,按下列顺序输入: 1 输入第一个数组的个数 2 输入第一个数组的数值 3 输入第二个数组的个数 4 输入第二个数组的数 ...

随机推荐

  1. PTA QQ Account Manageme【map的巧妙应有】

    5-27 QQ Account Management (25分) You are supposed to implement the functions of account "Log in ...

  2. 基于FBX SDK的FBX模型解析与加载 -(四)

    8. 骨骼蒙皮动画 骨骼蒙皮动画是当前游戏引擎中最常用的一种动画方式,关于其基本原理网络上的资料较多,关于到涉及的其它较复杂操作,如插值.融合等在这里也就先不再讨论了,而且其实现方式也与具体引擎的动作 ...

  3. bzoj 2761: [JLOI2011]不重复数字【hash】

    map会T,双hash会冲突--于是非酋写了个三hash #include<iostream> #include<cstdio> #include<cstring> ...

  4. 测试人员,今天再不懂BDD就晚了!

    首先,测试人员应该参与软件开发的全流程,这一点已经是软件行业的共识了. 其次,新技术.新框架.新思路不断涌现的今天,测试人员除了传统的功能测试,也要不断与时俱进,主动承担起自动化测试.性能测试等.除了 ...

  5. 让VS2010也支持html5和css3语法验证

    让VS2010也支持html5和css3语法验证 步骤: 首先打开VS2010或者可自行下载均可,我这里是利用VS的扩展器 弹出如下画面,然后选在,联机库,在右上角输入css3,即可看到下面,然后选中 ...

  6. C# BitmapData使用说明

    C# BitmapData使用说明msdn关于BitmapData原文解释地址:http://msdn.microsoft.com/zh-cn/library/5ey6h79d(v=vs.110).a ...

  7. spring3升级到spring4

    升级又失败了,dao层太多要改了,记录一下修改的内容,也是没白费我一下午时间 1. org.springframework.orm.hibernate3.annotation.AnnotationSe ...

  8. AtCoder Grand Contest 016 F - Games on DAG

    题目传送门:https://agc016.contest.atcoder.jp/tasks/agc016_f 题目大意: 给定一个\(N\)点\(M\)边的DAG,\(x_i\)有边连向\(y_i\) ...

  9. Social Net ZOJ - 3649

    Social Net ZOJ - 3649 题意: 反正原题题意我是看不懂... 参考:http://www.cnblogs.com/names-yc/p/4922867.html 给出一幅图,求最大 ...

  10. Spring数据访问1 - 数据源配置及数据库连接池的概念

    无论你要选择哪种数据访问方式,首先你都需要配置好数据源引用. Spring中配置数据源的几种方式 通过在JDBC驱动程序定义的数据源: 通过JNDI查找的数据源: 连接池的数据源: 对于即将发布到生产 ...