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 file_exists 检查文件或目录是否存在的函数
May 10 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
php eval函数一句话木马代码
May 21 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
tp5.1 框架查询表达式用法详解
May 25 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
PL-880隐藏功能
2021/03/01 无线电
PHP 字符串操作入门教程
2006/12/06 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
浅谈php和.net的区别
2014/09/28 PHP
php去除数组中重复数据
2014/11/18 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
python读取图片任意范围区域
2019/01/23 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
大学毕业生工作的自我评价
2013/10/01 职场文书
质检部部长职责
2013/12/16 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
主管会计岗位职责
2014/03/13 职场文书
请假条怎么写
2014/04/10 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
教师节宣传方案
2014/05/23 职场文书
高中军训的心得体会
2014/09/01 职场文书
2014企业年终工作总结
2014/12/23 职场文书
如何拟写通知正文?
2019/04/02 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers