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


Posted in PHP onNovember 27, 2011

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 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
PHP4实际应用经验篇(5)
Oct 09 PHP
php 设计模式之 工厂模式
Dec 19 PHP
PHP基础知识回顾
Aug 16 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 #PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 #PHP
PHP中strtotime函数使用方法详解
Nov 27 #PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 #PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 #PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 #PHP
php操作SVN版本服务器类代码
Nov 27 #PHP
You might like
PHP安装攻略:常见问题解答(二)
2006/10/09 PHP
php数组总结篇(一)
2008/09/30 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
Python实现从订阅源下载图片的方法
2015/03/11 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
基于python生成器封装的协程类
2019/03/20 Python
Django保护敏感信息的方法示例
2019/05/09 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
python中Mako库实例用法
2020/12/31 Python
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
远程调用的原理
2014/07/05 面试题
村委会贫困证明
2014/01/14 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
党员承诺书范文
2014/05/19 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
五一活动标语
2014/06/30 职场文书