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 相关文章推荐
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP答题类应用接口实例
Feb 09 PHP
php中使用sftp教程
Mar 30 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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
Admin generator, filters and I18n
2011/10/06 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
常用jQuery代码分享
2015/07/14 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
Linux下多个Python版本安装教程
2018/08/15 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
印度低票价航空公司:GoAir
2017/10/11 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
2014年中班元旦活动方案
2014/02/14 职场文书
作风建设演讲稿
2014/05/23 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
自我管理的活动方案
2014/08/25 职场文书
中班上学期个人总结
2015/02/12 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
实习报告怎么写
2019/06/20 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
关于MySQL中explain工具的使用
2023/05/08 MySQL