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之第十天
Oct 09 PHP
简体中文转换为繁体中文的PHP函数
Oct 09 PHP
php类
Nov 27 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
php7下的filesize函数
Sep 30 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
使用laravel指定日志文件记录任意日志
Oct 17 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中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Python urllib3软件包的使用说明
2020/11/18 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
财务会计大学生自我评价
2014/04/09 职场文书
感恩的演讲稿
2014/05/06 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
英文升职感谢信
2015/01/23 职场文书
项目安全员岗位职责
2015/02/15 职场文书
2016年公司新年寄语
2015/08/17 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书