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 相关文章推荐
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
php不写闭合标签的好处
Mar 04 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
PHP标准库(PHP SPL)详解
Mar 16 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/12/05 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
详解Bootstrap插件
2016/04/25 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
体现团队精神的口号
2014/06/06 职场文书
商务经理岗位职责
2014/07/30 职场文书
庆国庆活动总结
2014/08/28 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
大专护理专业自荐信
2015/03/25 职场文书