PHP的array_diff()函数在处理大数组时的效率问题

yipeiwu_com4年前PHP代码库
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二维数组合并及去重复的方法。分享给大家供大家参考。具体实现方法如下: $arr = array_merge($labels,$label); //合并需要合并的俩...

PHP fopen函数用法实例讲解

php fopen()函数用于打开文件或者 URL。 php fopen()函数 语法 作用:打开文件或者 URL。 语法: fopen(filename,mode,include_...

php实现用于验证所有类型的信用卡类

本文实例讲述了php实现用于验证所有类型的信用卡类。分享给大家供大家参考。具体如下: 这个php类比较完整,可以用于验证各种不同的信用卡,针对信用卡的卡号的通用规则进行了验证,同时对不同...

php实现跨域提交form表单的方法【2种方法】

本文实例讲述了php实现跨域提交form表单的方法。分享给大家供大家参考,具体如下: 有时我们为了网站安全考虑,我们不允许直接跨域提交form表单数据,如果我们自己有这个需求呢?下面我们...

PHP Google的translate API代码

新建一个ANSI的PHP文件,然后创建一个类: 复制代码 代码如下:header("Content-Type: text/html; charset=utf-8"); class Goo...