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 相关文章推荐
《PHP编程最快明白》第三讲:php数组
Nov 01 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
PHP判断指定时间段的2个方法
Mar 14 PHP
php中session使用示例
Mar 29 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
Memcached介绍及php-memcache扩展安装
Apr 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
PHP 批量删除 sql语句
2009/06/05 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
python中定义结构体的方法
2013/03/04 Python
python快速查找算法应用实例
2014/09/26 Python
python实现多人聊天室
2020/03/31 Python
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
财产公证书格式
2014/04/10 职场文书
市场策划求职信
2014/08/07 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
技术经济专业求职信
2014/09/03 职场文书
党员民主评议自我评价
2014/10/20 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
2014个人年度工作总结
2014/12/15 职场文书
北京英语导游词
2015/02/12 职场文书
检讨书怎么写
2015/05/07 职场文书
婚宴父母致辞
2015/07/27 职场文书
小学教师教育随笔
2015/08/14 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
tree shaking对打包体积优化及作用
2022/07/07 Java/Android