php中集合的并集,php中数组的并集、交集和差集函数介绍

在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().

计算数组的合并 array_merge与“+”的区别

array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的),如果数组是数字索引的,则键名会以连续方式重新索引。

注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引.代码如下:

$a=array(1 =>'a','b','c');

$b=array(1 =>'aa', 2,'c');

$union=array_merge($a,$b);

$plus=$a+$b;

print_r($union);

print_r($plus);

//结果依次为:

Array

{

[0]=> a

[1]=> b

[2]=> c

[3]=> aa

[4]=> 2

[5]=> c

}

Array

(

[1] => a

[2] => b

[3] => c

)

要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,而使用“+”合并数组则会和用“+”号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:

$a2=array('str'=>'a','b','c');

$b2=array('str'=>'aa', 2,'c');

$union2=array_merge($a2,$b2);

$plus2=$a2+$b2;

print_r($union2);

print_r($plus2);

//结果依次为:

Array

(

[str] => aa

[0] => b

[1] => c

[2] => 2

[3] => c

)

Array

(

[str] => a

[0] => b

[1] => c

)

注:如果想用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));

print_r($intersection);

print_r($intersection2);

//结果依次为:

Array

(

[3] => bmp

)

Array (

[0] => jpg

[3] => bmp

)

计算数组的差集,代码如下:

$old=array('jpg','png','gif','bmp');

$new=array('JPG','txt','docx','bmp');

$difference=array_diff($old,$new);

注:返回结果的元素包含$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));

(责任编辑:admin)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值