欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

过滤掉PHP数组中的重复值的实现代码

程序员文章站 2022-11-27 16:36:30
复制代码 代码如下:
复制代码 代码如下:

<?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使用当然让你的代码一下子减了好几行,数组容量过大时,函数的表现更好,为什么不用呢?