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 相关文章推荐
收集的DedeCMS一些使用经验
Mar 17 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
May 16 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
php在线代理转向代码
May 05 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
Jun 24 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
php控制文件下载速度的方法
Mar 24 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php基本函数汇总
2015/07/09 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
python回调函数的使用方法
2014/01/23 Python
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
旅游网创业计划书
2014/01/31 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
工作检讨书怎么写
2015/01/23 职场文书
2015年读书月活动总结
2015/03/26 职场文书
银行培训心得体会范文
2016/01/09 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android