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制作静态网站的模板框架(一)
Oct 09 PHP
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
php中的观察者模式简单实例
Jan 20 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
laravel框架中间件简单使用方法示例
Jan 25 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
jqgrid 简单学习笔记
2011/05/03 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
基于PyTorch中view的用法说明
2021/03/03 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
田径运动会开幕式及主持词
2014/03/28 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
班级班风口号大全
2015/12/25 职场文书
高一军训口号
2015/12/25 职场文书
Python字符串常规操作小结
2022/04/03 Python