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 相关文章推荐
网络资源
Oct 09 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP常用处理静态操作类
Apr 03 PHP
php实现简易聊天室应用代码
Sep 23 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
php curl优化下载微信头像的方法总结
Sep 07 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
js判断变量是否未定义的代码
2020/03/28 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
自我鉴定书面格式
2014/01/13 职场文书
结婚喜宴家长答谢词
2014/01/15 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
片区教研活动总结
2014/07/02 职场文书
社区清明节活动总结
2014/07/04 职场文书
小学生安全责任书
2014/07/25 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
暂住证证明
2015/06/19 职场文书
安全教育培训制度
2015/08/06 职场文书
SpringBoot详解执行过程
2022/07/15 Java/Android