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

PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的!

主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意

1)键名为数字时,array_merge()后面的值将不会覆盖原来的值,而是附加到后面,但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)

2)键名为字符串时,array_merge()此时会覆盖掉前面相同键名的值,但+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)。

需要注意的是数组键形式 ‘数字‘ 等价于 数字

$a = array(‘a‘, ‘b‘);
$b = array(‘c‘, ‘d‘);
$c = $a + $b;
var_dump($a);
var_dump(array_merge($a, $b));

//输出:

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)
  2 => string ‘c‘ (length=1)
  3 => string ‘d‘ (length=1)

++++++++++++++++++++++++++++++++++++++++++  

$a = array(
	0 => ‘a‘,
	1 => ‘b‘
);
$b = array(
	0 => ‘c‘,
	1 => ‘b‘
);
$c = $a + $b;
var_dump($c);
var_dump(array_merge($a, $b));

//输出:

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)
  2 => string ‘c‘ (length=1)
  3 => string ‘b‘ (length=1)

++++++++++++++++++++++++++++++++++++++++++  

$a = array(‘a‘, ‘b‘);
$b = array(
	‘0‘ => ‘c‘,
	1 => ‘b‘
);
$c = $a + $b;
var_dump($c);
var_dump(array_merge($a, $b));

//输出:
array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)
  2 => string ‘c‘ (length=1)
  3 => string ‘b‘ (length=1)

++++++++++++++++++++++++++++++++++++++++++ 

$a = array(
	0 => ‘a‘,
	1 => ‘b‘
);
$b = array(
	‘0‘ => ‘c‘,
	‘1‘ => ‘b‘
);
$c = $a + $b;
var_dump($c);
var_dump(array_merge($a, $b));

输出:

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)

array
  0 => string ‘a‘ (length=1)
  1 => string ‘b‘ (length=1)
  2 => string ‘c‘ (length=1)
  3 => string ‘b‘ (length=1)


对多个数组合并去重技巧

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

延伸阅读:

PHP合并2个数字键数组的值

时间: 2024-10-09 12:36:37

PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧的相关文章

js中数组,对象,json区别

对于js新手,这是我这周项目总结.包括数组,对象,json区别,以及前后台数据传输 数组:批量存放数据的工具,包括取值,数组的各种操作,[ ]在js中只表示数组,或者访问对象的属性,昨天还碰到了将值转化为数组,进行json字符转转化的例子.下面会给出具体例子 var arrData=["1","2","3']; var arrData=new Array(); var paramvo=[task_id];// 定义数组paramvo,值为[9999],方便

php 合并数组 "+"和"array_merge"的区别

主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖) 2)键名为字符时,+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值 <?php$array1 = array(0 => 'zero_a', 2 => 

PHP中array_merge和array相加的区别分析

今天处理一个这样的问题:如何获取字符键名相同值不同的两个数组值集合,用array_merge和数组相加都不可行,让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是string,两者区别: 复制代码代码如下: <?php$arr1 = array('a'=>'PHP');$arr2 = array('a'=>'JAVA');//如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值print_r(array_merge(

array_merge和array的区别分析

记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是string,两者区别: <?php $arr1 = array('a'=>'PHP'); $arr2 = array('a'=>'PYTHON'); print_r(array_merge($arr1,$arr2)); //Array ( [a] => PYTHON ) 如

C++中关于[]静态数组和new分配的动态数组的区别分析

这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解.具体区别如下: 一.对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小:因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组的长度.int a[5]; 则sizeof(a)=20,sizeof(*a)=4.因为整个数组共占20字节,首个元素(i

PHP教程:PHP中单引号与双引号的区别分析

PHP教程:PHP中单引号与双引号的区别分析 在PHP中,我们可以使用单引号或者双引号来表示字符串.不过我们作为开发者,应该了解其中的区别.单引号与双引号对于定义字符一个是可以解析变量一个是会把变量直接输出来,同时单引号与双引号在字符处理上单引号要优与双引号 ①转义的字符不同 单引号和双引号中都可以使用转义字符(\),但只能转义在单引号中引起来的单引号和转义转义符本身.如果用双引号("")括起字符串,PHP懂得更多特殊字符串的转义序列. 1 ②对变量的解析不同 单引号字符串中出现的变量

Java中Comparable和Comparator接口区别分析

Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧.Comparable 简介Comparable 是排序接口.若一个类实现了Comparab 本文要来详细分析一下Java中Comparable和Comparator接口的区别,

C#中多态、重载、重写区别分析

本文实例总结了C#中多态.重载与重写的概念与区别.对于初学C#的朋友来说有不错的参考价值.分享给大家供大家参考.具体分析如下: 重写 : 是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override . 格式如下: 1.在基类中: public virtual void myMethod() { } 2.在子类中: public override void myMethod() { } 重写以后,用基类对象和子类对象访问myMethod()方法,结果都是

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$