php去重比较
前言
去重是我们经常用到的算法,我们应该怎么选择高效的方法那,这里我列举三种,并且把他们的效率运行一下。
零、公用代码
<?php
$arr = array();
// 创建100000个 1-99 随机元素的数组
for($i=0; $i<100000; $i++){
$arr[] = mt_rand(1,99);
}
// 记录开始时间与内存
$starttime = getMicrotime();
$startM = round(memory_get_usage(true)/1024,2);
// 去重代码区 start
{Deduplication codes}
// 去重代码区 end
// 记录结束时间与内存
$endtime = getMicrotime();
$endM = round(memory_get_usage(true)/1024,2);
$arr = array_values($arr);
echo 'unique count:'.count($arr).'<br>';
echo 'run time:'.(float)( round(($endtime-$starttime)*1000, 2)).'ms<br>';
echo 'use memory:'.$endM-$startM . 'kb';
/**
* 获取microtime
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>
一、 array_unique
<?php
// 去重程序代码 start
$arr = array_unique($arr);
// 去重程序代码 end
// 结论
{
unique count:99
run time:3.07ms
use memory:2048kb
}
二、array 赋值
<?php
// 去重程序代码 start
$arrList = [];
foreach ($arr as $k=>$v) {
$arrList[$v] = $v;
}
unset($arr);
$arr = $arrList;
// 去重程序代码 end
// 结论
{
unique count:99
run time:2.87ms
use memory:2048kb
}
三、array_flip
<?php
// 去重程序代码 start
$arr = array_flip($arr);
$arr = array_flip($arr);
// 去重程序代码 end
// 结论
{
unique count:99
run time:1.47ms
use memory:2048kb
}
总结
第一种和第二种效率相差不大,推荐使用第三种。