PHP的array_diff()函数在处理大数组时的效率问题

 更新时间:2011年11月27日 23:15:31   作者:  
PHP 5.2.6 以上版本的 array_diff() 函数在处理大数组时,需要花费超长时间,这个 bug 已经被官方确认;在这个问题被修复之前或者在我们不能控制 PHP 版本的时候,可以使用本文提供的方法
cisa 提交到 PHP 官方 BUG 页面上的方法
复制代码 代码如下:

<?php
/**
* 解决 php 5.2.6 以上版本 array_diff() 函数在处理
* 大数组时的需要花费超长时间的问题
*
* 整理:http://www.CodeBit.cn
* 来源:http://bugs.php.net/47643
*/
function array_diff_fast($data1, $data2) {
$data1 = array_flip($data1);
$data2 = array_flip($data2);
foreach($data2 as $hash => $key) {
if (isset($data1[$hash])) unset($data1[$hash]);
}
return array_flip($data1);
}
?>

根据 ChinaUnix 论坛版主 hightman 思路重写的方法
复制代码 代码如下:

<?php
/**
* 解决 php 5.2.6 以上版本 array_diff() 函数在处理大数组时的效率问题
* 根据 ChinaUnix 论坛版主 hightman 思路写的方法
*
* 整理:http://www.CodeBit.cn
* 参考:http://bbs.chinaunix.net/viewthread.php?tid=938096&rpid=6817036&ordertype=0&page=1#pid6817036
*/
function array_diff_fast($firstArray, $secondArray) {
// 转换第二个数组的键值关系
$secondArray = array_flip($secondArray);
// 循环第一个数组
foreach($firstArray as $key => $value) {
// 如果第二个数组中存在第一个数组的值
if (isset($secondArray[$value])) {
// 移除第一个数组中对应的元素
unset($firstArray[$key]);
}
}
return $firstArray;
}
?>

此方法只交换了第二个数组的 key 和 value,所以效率更高。
注意:PHP 内置的 array_diff() 函数可以处理多个数组,而本文提供的方法只处理了两个数组的比较。

相关文章

  • php实现两表合并成新表并且有序排列的方法

    php实现两表合并成新表并且有序排列的方法

    这篇文章主要介绍了php实现两表合并成新表并且有序排列的方法,涉及针对数组的遍历与排序操作技巧,具有一定的实用价值,需要的朋友可以参考下
    2014-12-12
  • php简单生成随机数的方法

    php简单生成随机数的方法

    这篇文章主要介绍了php简单生成随机数的方法,该功能可用于生成验证码,涉及php字符串及mt_rand方法的使用技巧,需要的朋友可以参考下
    2015-07-07
  • PHP 遍历XP文件夹下所有文件

    PHP 遍历XP文件夹下所有文件

    这只是遍历第一层文件夹的文件,用isdir()稍加改进可以遍历更多层文件夹;
    2008-11-11
  • PHP使用new StdClass()创建空对象的方法分析

    PHP使用new StdClass()创建空对象的方法分析

    这篇文章主要介绍了PHP使用new StdClass()创建空对象的方法,结合具体实例形式分析了php空对象的创建与使用方法,需要的朋友可以参考下
    2017-06-06
  • 浅谈php优化需要注意的地方

    浅谈php优化需要注意的地方

    本文总结了一些自己在项目中进行php优化的时候的注意事项,都是自己经常用到的,这里推荐给大家,有遗漏的地方也请告之。
    2014-11-11
  • PHP计算个人所得税示例【不使用速算扣除数】

    PHP计算个人所得税示例【不使用速算扣除数】

    这篇文章主要介绍了PHP计算个人所得税,结合实例形式分析了php自定义函数不使用速算扣除数计算个人所得税的相关操作技巧,涉及数组遍历、数值运算的简单使用,需要的朋友可以参考下
    2018-03-03
  • PHP实现动态柱状图改进版

    PHP实现动态柱状图改进版

    这篇文章主要介绍了PHP实现动态柱状图改进版,是在前面所述实现柱状图的基础上进行的改进,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP访问Google Search API的方法

    PHP访问Google Search API的方法

    这篇文章主要介绍了PHP访问Google Search API的方法,实例分析了php针对谷歌API访问的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP curl get post 请求的封装函数示例【get、post、put、delete等请求类型】

    PHP curl get post 请求的封装函数示例【get、post、put

    这篇文章主要介绍了PHP curl get post 请求的封装函,包含了php使用curl针对get、post、put、delete等请求类型进行封装的操作技巧,以及CURLOPT_CUSTOMREQUEST控制DELETE、PUT请求类型的实现方法,需要的朋友可以参考下
    2023-04-04
  • PHP array_combine() 函数内置函数

    PHP array_combine() 函数内置函数

    这篇文章主要介绍了PHP array_combine()函数内置函数,array_combine()是PHP中的一个内置函数,用于组合两个数组并通过使用一个数组作为键和另一个数组作为值来创建一个新数组
    2022-09-09

最新评论