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操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
二招解决php乱码问题
Mar 25 PHP
基于PHP文件操作的详解
Jun 05 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php类的扩展和继承用法实例
Jun 20 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 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
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python批量修改文本文件内容的方法
2016/04/29 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
python生成word合同的实例方法
2021/01/12 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
荷兰手表网站:Watch2Day
2018/07/02 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
自动化专业毕业生求职信
2014/06/18 职场文书
验房委托书
2014/08/30 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js