• 技术文章 >php教程 >php手册

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

    2016-06-13 09:47:38原创481
    在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().

    //计算数组的合并 array_merge与“+”的区别
    array_merge() 函数把两个或多个数组合并为一个数组。

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

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

    代码如下 复制代码

    $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@php.cn核实处理。
    上一篇:php HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR区别总结 下一篇:一个简单的PHP中多维数组的排序
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• 完整邮件发送类• 第4章 数据处理-php正则表达式-郑阿奇(续)• php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)• php中的观察者模式• PHP+XML 制作简单的留言本 图文教程
    1/1

    PHP中文网