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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
php的curl封装类用法实例
Nov 07 PHP
PHP多文件上传类实例
Mar 07 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
为你总结一些php信息函数
Oct 21 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
PHP检测链接是否存在的代码实例分享
May 06 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 PHP
php防止表单重复提交实例讲解
Feb 11 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 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实现源代码加密的方法
2015/07/11 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
PHP序列化操作方法分析
2016/09/28 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
Vue中的vue-resource示例详解
2018/11/02 Javascript
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
Python实现Dijkstra算法
2018/10/17 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
用python写测试数据文件过程解析
2019/09/25 Python
python随机数分布random均匀分布实例
2019/11/27 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
婚庆公司的创业计划书
2014/01/22 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
2015年端午节活动总结
2015/02/11 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
小学副班长竞选稿
2015/11/21 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL