php array_intersect比array_diff快(附详细的使用说明)

 更新时间:2011年07月03日 03:29:24   作者:  
在PHP中,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快。
如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) - count(array_intersect($a, $b)),而不要用 count(array_diff($a, $b));

前面要比后者快,在大数组中更为明显。

1.array_intersect函数
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。
#1 array_intersect() 例子
复制代码 代码如下:

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
?>
这使得 $result 成为:
Array
(
[a] => green
[0] => red
)

2.自我实现的array_intersect()函数比php原函数array_intersect()快五倍
复制代码 代码如下:

/**
*
* 自定义的array_intersect
* 如果求的是一维数组的交集这个函数比系统的array_intersect快5倍
*
* @param array $arr1
* @param array $arr2
* @author LIUBOTAO 2010-12-13上午11:40:20
*
*/
function my_array_intersect($arr1,$arr2)
{
for($i=0;$i<sizeof($arr1);$i++)
{
$temp[]=$arr1[$i];
}
for($i=0;$i<sizeof($arr1);$i++)
{
$temp[]=$arr2[$i];
}
sort($temp);
$get=array();
for($i=0;$i<sizeof($temp);$i++)
{
if($temp[$i]==$temp[$i+1])
$get[]=$temp[$i];
}
return $get;
}
$array1 = array("green", "red", "blue");
$array2 = array("green", "yellow", "red");
echo "<pre>";
print_r(my_array_intersect($array1, $array2));
echo "<pre/>";

array_diff — 计算数组的差集

array array_diff ( array $array1 , array $array2 [, array $ ... ] )
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。

#1 array_diff() 例子
复制代码 代码如下:

<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>

在 $array1 中多次出现的值一样处理,输出结果为:
复制代码 代码如下:

Array
(
[1] => blue
)

Note: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。

Note: 注意本函数只检查了多维数组中的一维。当然可以用 array_diff($array1[0], $array2[0]); 检查更深的维度。

相关文章

  • 优化php效率,提高php性能的一些方法

    优化php效率,提高php性能的一些方法

    优化php效率,提高php性能的一些方法,开发php的朋友可以注意下。
    2011-03-03
  • php实现动态口令认证的示例代码

    php实现动态口令认证的示例代码

    这篇文章主要为大家详细介绍了php实现动态口令认证的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • 批量获取memcache值并按key的顺序返回的实现代码

    批量获取memcache值并按key的顺序返回的实现代码

    一台memcache时返回是正确的,在有多台memcache时就无法一一对应的按顺序返回。
    2011-06-06
  • php递归遍历多维数组的方法

    php递归遍历多维数组的方法

    这篇文章主要介绍了php递归遍历多维数组的方法,实例分析了php数组遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • PHP简单操作MongoDB的方法(安装及增删改查)

    PHP简单操作MongoDB的方法(安装及增删改查)

    这篇文章主要介绍了PHP简单操作MongoDB的方法,简单分析了php安装及操作MongoDB数据库的方法,涉及PHP针对MongoDB数据库基本的增删改查等操作技巧,需要的朋友可以参考下
    2016-05-05
  • PHP对象链式操作实现原理分析

    PHP对象链式操作实现原理分析

    这篇文章主要介绍了PHP对象链式操作,结合实例形式分析了链式操作的简单用法及对象链式操作的执行流程,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • PHP简单获取及判断提交来源的方法

    PHP简单获取及判断提交来源的方法

    这篇文章主要介绍了PHP简单获取及判断提交来源的方法,涉及PHP中$_SERVER及字符串操作的使用技巧,需要的朋友可以参考下
    2016-04-04
  • php 日期时间处理函数小结

    php 日期时间处理函数小结

    php 日期时间处理函数小结,包括日期转换为星期、计算出两个日期之间的月份等,值得参考下。
    2009-12-12
  • PHP 反射(Reflection)使用实例

    PHP 反射(Reflection)使用实例

    这篇文章主要介绍了PHP 反射(Reflection)使用实例,本文讲解了ReflectionClass、ReflectionExtension、 ReflectionFunction、ReflectionMethod、ReflectionObject、ReflectionParameter等类的使用实例,需要的朋友可以参考下
    2015-05-05
  • PHPTree——php快速生成无限级分类

    PHPTree——php快速生成无限级分类

    在开发中经常需要用到树形数据,比如无限多级分类,就是典型的树形结构。这里面的算法,用到了递归思想,为了简化开发过程,我编写了一个工具来提升开发效率,需要的朋友可以参考下
    2018-03-03

最新评论