PHP两种去掉数组重复值的方法比较


Posted in PHP onJune 19, 2014

去除一个数组中的重复值,可以使用foreach方法,也可以使用array_unique方法,下面的代码两种方法都使用了。

<?php
$arrF = array();
$arrS = array();
$intTotal = 100;
$intRand = 10;
for($i=0; $i < $intTotal; $i++)
{
	$arrF[] = rand(1, $intRand);
	$arrS[] = rand(1, $intRand);
}
$arrT = array_merge($arrF, $arrS);
$arrRF = array();
$intStart = time();
foreach($arrT as $v)
{
	if(in_array($v, $arrRF))
	{
		continue;
	}
	else
	{
		$arrRF[] = $v;
	}
}
$intEnd = time();
$intTime = $intEnd-$intStart;
echo "With Continue,Spend time:$intTime<br/>";
$intStart1 = time();
$arrRS = array_unique($arrT);
$intEnd2 = time();
$intTime2 = $intEnd2-$intStart1;
echo "With array_unique function,Spend time:($intTime2)";
echo "<pre>";
print_r($arrT);
print_r($arrRF);
print_r($arrRS);
echo "</pre>";
?>

在$intTotal比较小的情况下,比如说1000以内,$intRand的取值基本不影响结果,两者执行的时间都差不多。

测试$intTotal 大于10000时,$intRand取值100时,使用array_unique的效率要高于foreach循环判断,$intRand=10,两者执行时间一致。

因此,可以得出结论,当数组容量不大,大概在1000以内时,使用两者的执行效率差不多。

当数组容量比较大时(具体应该到什么值,我没有详细测试,感兴趣的可以确定一下这个值),随着$intRand的逐渐增大,array_unique的表现更好,我不使用$intTotal/$intRand这个比值,是因为,感觉并不是成比例变化,但是基本会遵循比值越大,array_unique表现越好。

综上所述,在过滤数组重复值的时候,建议使用array_unuique,数组不大的时候两者效率等同,而array_unique使用当然让你的代码一下子减了好几行,数组容量过大时,函数的表现更好,为什么不用呢?

PHP 相关文章推荐
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Jun 05 PHP
如何使用php输出时间格式
Aug 31 PHP
linux中cd命令使用详解
Jan 08 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
如何打开php的gd2库
Feb 09 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 #PHP
ThinkPHP3.1基础知识快速入门
Jun 19 #PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 #PHP
php使用百度ping服务代码实例
Jun 19 #PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 #PHP
PHP采集类Snoopy抓取图片实例
Jun 19 #PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 #PHP
You might like
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
浅谈PHP的反射机制
2016/12/15 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python中 * 的用法详解
2019/07/10 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
军训自我鉴定范文
2014/02/13 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
国际贸易求职信
2014/07/05 职场文书
小学教育见习报告
2014/10/31 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书