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超级全局变量
Jan 26 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
php密码生成类实例
Sep 24 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
php生成RSS订阅的方法
Feb 13 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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 方便水印和缩略图的图形类
2009/05/21 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
php while循环控制的简单实例
2016/05/30 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
javascript折半查找详解
2015/01/26 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
js继承实现方法详解
2016/12/16 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
vue axios用法教程详解
2017/07/23 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
layui的select联动实现代码
2019/09/28 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
如何查找网页漏洞
2016/06/22 面试题
银行学习十八大感想
2014/01/11 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python