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 相关文章推荐
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 PHP
php下过滤HTML代码的函数
Dec 10 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 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 daodb插入、更新与删除数据
2009/03/19 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
判断网页编码的方法python版
2016/08/12 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
实例介绍Python中整型
2019/02/11 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
个人对照检查材料
2014/02/12 职场文书
数学检讨书1000字
2014/02/24 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
Django drf请求模块源码解析
2021/06/08 Python
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL