php去重效率

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
}

 


总结

第一种和第二种效率相差不大,推荐使用第三种。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值