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 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
PHP 批量删除数据的方法分析
Oct 30 PHP
php GeoIP的使用教程
Mar 09 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
php微信公众号开发之图片回复
Oct 20 PHP
php下的原生ajax请求用法实例分析
Feb 28 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中的超全局变量
2006/10/09 PHP
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
党的群众路线教育实践方案
2014/05/11 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
作文评语集锦
2014/12/25 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python