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+MySQL 制作简单的留言本
Nov 02 PHP
php htmlspecialchars加强版
Feb 16 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
php实现的mongodb操作类
May 28 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
php类的自动加载操作实例详解
Sep 28 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 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批量生成缩略图的代码
2008/07/19 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JavaScript闭包详解
2015/02/02 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
原生js实现商品筛选功能
2019/10/28 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
pycharm创建一个python包方法图解
2019/04/10 Python
解决python运行启动报错问题
2020/06/01 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
python实现单机五子棋
2020/08/28 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
《三个小伙伴》教学反思
2014/04/11 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
个人汇报材料范文
2014/12/30 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
校长师德表现自我评价
2015/03/05 职场文书
初中地理教学反思
2016/02/19 职场文书