PHP求并集,交集,差集

一、总结

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

array_merge() array_intersect() array_diff()

1、php中如何求并集?

array_merge() +

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

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

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

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

  1. $a = array(1 => 'a', 'b', 'c');
  2. $b = array(1 => 'aa', 2, 'c');
  3. $union = array_merge($a, $b);
  4. $plus = $a + $b;
  5. print_r($union);
  6. print_r($plus);
  7. //结果依次为:
  8. Array
  9. {
  10. [0]=> a
  11. [1]=> b
  12. [2]=> c
  13. [3]=> aa
  14. [4]=> 2
  15. [5]=> c
  16. }
  17. Array
  18. (
  19. [1] => a
  20. [2] => b
  21. [3] => c
  22. )

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

  1. $a2 = array('str' => 'a', 'b', 'c');
  2. $b2 = array('str' => 'aa', 2, 'c');
  3. $union2 = array_merge($a2, $b2);
  4. $plus2 = $a2 + $b2;
  5. print_r($union2);
  6. print_r($plus2);
  7. //结果依次为:
  8. Array
  9. (
  10. [str] => aa
  11. [0] => b
  12. [1] => c
  13. [2] => 2
  14. [3] => c
  15. )
  16. Array
  17. (
  18. [str] => a
  19. [0] => b
  20. [1] => c
  21. )

注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉

2、php合并 array_merge与“+”的区别是什么?

+ 合并索引

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

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

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

  1. $a = array(1 => 'a', 'b', 'c');
  2. $b = array(1 => 'aa', 2, 'c');
  3. $union = array_merge($a, $b);
  4. $plus = $a + $b;
  5. print_r($union);
  6. print_r($plus);
  7. //结果依次为:
  8. Array
  9. {
  10. [0]=> a
  11. [1]=> b
  12. [2]=> c
  13. [3]=> aa
  14. [4]=> 2
  15. [5]=> c
  16. }
  17. Array
  18. (
  19. [1] => a
  20. [2] => b
  21. [3] => c
  22. )

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

  1. $a2 = array('str' => 'a', 'b', 'c');
  2. $b2 = array('str' => 'aa', 2, 'c');
  3. $union2 = array_merge($a2, $b2);
  4. $plus2 = $a2 + $b2;
  5. print_r($union2);
  6. print_r($plus2);
  7. //结果依次为:
  8. Array
  9. (
  10. [str] => aa
  11. [0] => b
  12. [1] => c
  13. [2] => 2
  14. [3] => c
  15. )
  16. Array
  17. (
  18. [str] => a
  19. [0] => b
  20. [1] => c
  21. )

注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉

3、php中如何求交集?

array_intersect()

array_intersect() 函数返回两个或多个数组的交集数组,结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,注释:仅有值用于比较,代码如下:

  1. $a = array('jpg','png','gif','bmp');
  2. $b = array('JPG','txt','docx','bmp');
  3. $intersection = array_intersect($a, $b);

还可以通过函数,获取自己想要的(比如元素不区分大小写),代码如下:

  1. $intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
  2. print_r($intersection);
  3. print_r($intersection2);
  4. //结果依次为:
  5. Array
  6. (
  7. [3] => bmp
  8. )
  9. Array (
  10. [0] => jpg
  11. [3] => bmp
  12. )

4、php中如何求差集?

array_diff()

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

  1. $old = array('jpg','png','gif','bmp');
  2. $new = array('JPG','txt','docx','bmp');
  3. $difference = array_diff($old, $new);

注:返回结果的元素包含$old的元素,不包括$new的元素

print_r($difference);

结果为:

  1. Array
  2. (
  3. [0] => jpg
  4. [1] => png
  5. [2] => gif
  6. )

也可以用函数先进行处理,再计算差集

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值,在返回的数组中,键名保持不变。

语法:array_diff(array1,array2,array3...)

代码如下:

  1. $difference = array_diff(array_map('strtolower',$old),
  2. array_map('strtolower',$new));

二、PHP数组的几个操作,求并集,交集,差集,数组与字符串的相互转换及数组去重

参考:PHP数组的几个操作,求并集,交集,差集,数组与字符串的相互转换及数组去重 - shao.bing的专栏 - CSDN博客
https://blog.csdn.net/shaobingj126/article/details/51814726

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

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

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

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

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

  1. $a = array(1 => 'a', 'b', 'c');
  2. $b = array(1 => 'aa', 2, 'c');
  3. $union = array_merge($a, $b);
  4. $plus = $a + $b;
  5. print_r($union);
  6. print_r($plus);
  7. //结果依次为:
  8. Array
  9. {
  10. [0]=> a
  11. [1]=> b
  12. [2]=> c
  13. [3]=> aa
  14. [4]=> 2
  15. [5]=> c
  16. }
  17. Array
  18. (
  19. [1] => a
  20. [2] => b
  21. [3] => c
  22. )

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

  1. $a2 = array('str' => 'a', 'b', 'c');
  2. $b2 = array('str' => 'aa', 2, 'c');
  3. $union2 = array_merge($a2, $b2);
  4. $plus2 = $a2 + $b2;
  5. print_r($union2);
  6. print_r($plus2);
  7. //结果依次为:
  8. Array
  9. (
  10. [str] => aa
  11. [0] => b
  12. [1] => c
  13. [2] => 2
  14. [3] => c
  15. )
  16. Array
  17. (
  18. [str] => a
  19. [0] => b
  20. [1] => c
  21. )

注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉

计算数组的交集

array_intersect() 函数返回两个或多个数组的交集数组,结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,注释:仅有值用于比较,代码如下:

  1. $a = array('jpg','png','gif','bmp');
  2. $b = array('JPG','txt','docx','bmp');
  3. $intersection = array_intersect($a, $b);

还可以通过函数,获取自己想要的(比如元素不区分大小写),代码如下:

  1. $intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
  2. print_r($intersection);
  3. print_r($intersection2);
  4. //结果依次为:
  5. Array
  6. (
  7. [3] => bmp
  8. )
  9. Array (
  10. [0] => jpg
  11. [3] => bmp
  12. )

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

  1. $old = array('jpg','png','gif','bmp');
  2. $new = array('JPG','txt','docx','bmp');
  3. $difference = array_diff($old, $new);

注:返回结果的元素包含$old的元素,不包括$new的元素

print_r($difference);

结果为:

  1. Array
  2. (
  3. [0] => jpg
  4. [1] => png
  5. [2] => gif
  6. )

也可以用函数先进行处理,再计算差集

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值,在返回的数组中,键名保持不变。

语法:array_diff(array1,array2,array3...)

代码如下:

  1. $difference = array_diff(array_map('strtolower',$old),
  2. array_map('strtolower',$new));

数组转换为字符串:

<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

字符串转换为数组:

<?php
$str="1432532 ,4444";

$arr = explode(",",$str);
echo count($arr)."</br>";

print_r($arr);
?>

数组元素值去重

<?php
$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));
?>

针对有空格的字符串转换成无空格的字符串

<?php
$str="1432532 ,67878";

$arr = explode(",",$str);
//echo count($arr)."</br>";

$str_u='';

for($i=0;$i<count($arr);$i++)
{

$str_u .=trim($arr[$i]).',';

}
echo $str_u;

?>

 

PHP求并集,交集,差集的更多相关文章

  1. 【Set】Set集合求并集,交集,差集

    /** * @author: Sam.yang * @date: 2020/11/16 11:14 * @desc: Set集合操作工具类 */ public class SetOptUtils { ...

  2. java数组并集/交集/差集(补集)

    1.说明 使用java容器类的性质选择容器 2.实现 package com.wish.datastrustudy; import java.util.HashSet; import java.uti ...

  3. python求两个列表的并集.交集.差集

    求两个列表的差集 >>> a = [1,2,3] >>> b=[1,2] >>> ################################ ...

  4. Linux 求文件交集 差集等

    使用comm命令 假设两个文件FILE1和FILE2用集合A和B表示,FILE1内容如下: a b c e d a FILE2内容如下: c d a c 基本上有两个方法,一个是comm命令,一个是g ...

  5. [Linux] 取两个文件的并集/交集/差集

    uniq -d是只打印重复行 -u是只打印独一无二的行文件A : abcd文件B: cdef取并集:A + B sort A B|uniq 取交集: sort A B|uniq -d 取差集:A - ...

  6. python 两个list 求交集,并集,差集

    def diff(listA,listB): #求交集的两种方式 retA = [i for i in listA if i in listB] retB = list(set(listA).inte ...

  7. java(List或Array数组)求交集、并集、差集, 泛型工具类

    业务需要求不同类型的交集.并集.差集为避免代码冗余编写工具类. 注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n ...

  8. JS 对象 数组求并集,交集和差集

    一.JS数组求并集,交集和差集 需求场景 最近,自己项目中有一些数组操作,涉及到一些数学集的运算,趁着完成后总结一下. 简化问题之后,现有两数组a = [1, 2, 3],b = [2, 4, 5], ...

  9. C++ 求向量的交集、并集、差集

    #include<iostream> #include<stdio.h> #include<list> #include<algorithm> //se ...

随机推荐

  1. mvc actionresult返回各种文件

    public ActionResult ReviewFile(string folderName, string fileBasename, string extendName) { //以后根据后缀 ...

  2. Go语言初尝

    对于语言设计之争, 唯一需要牢记的一句话是: 如果把 C 变成 C++, 那么 C 就消失了. Go 是一个轻量级的简洁的支持并发的现代语言,  可以用于探索性个人项目, 这是我想学这门语言的主要原因 ...

  3. Linux基础命令---swapon

    swapon 在指定的设备上启用交换分区,使用的设备或文件由专用文件参数提供.它可以是”-L label”或”-U UUID”,以指示一个设备的标签或UUID.对swapon的调用通常发生在系统引导脚 ...

  4. jquery checkbox相关 prop方法

    jquery checkbox相关 prop方法 firefox中 checkbox属性checked="checked"已有,但复选框却不显示打钩的原因复选框绑定了click事件 ...

  5. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  6. 干货:Java并发编程必懂知识点解析

    本文大纲 并发编程三要素 原子性 原子,即一个不可再被分割的颗粒.在Java中原子性指的是一个或多个操作要么全部执行成功要么全部执行失败. 有序性 程序执行的顺序按照代码的先后顺序执行.(处理器可能会 ...

  7. 关于RSU和股票期权(Stock Option)

    最近,和有些猎头沟通时,他们提到RSU的概念,特地搜了下,其和股票期权(Stock Option)差别如下: RSU 和Option 一般都是逐年实现的,比如Offer Letter签三年,上写的给你 ...

  8. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

  9. 20145312 《网络对抗》 Web安全基础实践

    20145312 <网络对抗> Web安全基础实践 问题回答 SQL注入攻击原理,如何防御 原理:攻击者在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,把SQL语句当做 ...

  10. poj 2369 Permutations - 数论

    We remind that the permutation of some final set is a one-to-one mapping of the set onto itself. Les ...