在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().
//计算数组的合并 array_merge与“+”的区别
array_merge() 函数把两个或多个数组合并为一个数组。
如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。
注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。(参见例子 2)
代码如下 | 复制代码 |
$a = array(1 => 'a', 'b', 'c'); |
要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,
而使用“+”合并数组则会和用“+”号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:
代码如下 | 复制代码 |
$a2 = array('str' => 'a', 'b', 'c'); 结果依次为: Array |
注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉
//计算数组的交集
array_intersect() 函数返回两个或多个数组的交集数组。
结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。
注释:仅有值用于比较。
代码如下 | 复制代码 |
$a = array('jpg','png','gif','bmp'); $b = array('JPG','txt','docx','bmp'); $intersection = array_intersect($a, $b); |
还可以通过函数,获取自己想要的(比如元素不区分大小写)
代码如下 | 复制代码 |
$intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b)); |
结果依次为:
代码如下 | 复制代码 |
Array ( [3] => bmp ) Array ( [0] => jpg [3] => bmp ) |
//计算数组的差集
代码如下 | 复制代码 |
$old = array('jpg','png','gif','bmp'); |
注:返回结果的元素包含$old的元素,不包括$new的元素
print_r($difference);
结果为:
代码如下 | 复制代码 |
Array ( [0] => jpg [1] => png [2] => gif ) |
也可以用函数先进行处理,再计算差集
array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。
在返回的数组中,键名保持不变。
语法
array_diff(array1,array2,array3...)
代码如下 | 复制代码 |
$difference = array_diff(array_map('strtolower',$old), array_map('strtolower',$new)); |