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 相关文章推荐
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
PHP小教程之实现双向链表
Jun 12 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
CI框架常用函数封装实例
Nov 21 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
Phpstorm+Xdebug断点调试PHP的方法
May 14 PHP
php写入txt乱码的解决方法
Sep 17 PHP
如何通过PHP实现Des加密算法代码实例
May 09 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
Python csv模块使用方法代码实例
2019/08/29 Python
Python笔记之工厂模式
2019/11/20 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
预备党员转正考核材料
2014/06/03 职场文书
教师学期末个人总结
2015/02/13 职场文书
2015年司法所工作总结
2015/04/27 职场文书
九九重阳节致辞
2015/07/31 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android