过滤掉PHP数组中的重复值的实现代码
程序员文章站
2022-05-21 17:38:06
复制代码 代码如下:
<?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
$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二维数组的去重问题解析