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过滤危险html代码
Aug 18 PHP
PHP 组件化编程技巧
Jun 06 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
php跨站攻击实例分析
Oct 28 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
Feb 14 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 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 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
JS中的BOM应用
2018/02/02 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
Python正则表达式指南 推荐
2018/10/09 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
python3访问字典里的值实例方法
2020/11/18 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
涉外文秘个人求职的自我评价
2013/10/07 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
文案策划岗位职责
2015/02/11 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
600字作文之感受大自然
2019/11/27 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang