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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
PHP语法小结之基础和变量
Nov 22 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 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生成EXCEL的东东
2006/10/09 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
Python进程通信之匿名管道实例讲解
2015/04/11 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
经典演讲稿范文
2013/12/30 职场文书
技校个人求职信范文
2014/01/25 职场文书
城管综合整治方案
2014/05/01 职场文书
给校长的建议书100字
2014/05/16 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
Python list列表删除元素的4种方法
2021/11/01 Python