之前,使用in_array(),进行逐个查重,数组长度1万以上,而且每次随机码都会查询,效率比较低。
下面是优化之后的一个结果。
<?php
function genRandomString($len, $chars)
{
$charsLen = count($chars) - 1;
// 将数组打乱
shuffle($chars);
$output = "";
for ($i = 0; $i < $len; $i++) {
$output .= $chars[mt_rand(0, $charsLen)];
}
return $output;
}
// 生成指定数量随机码
$i = 0;
$codeLen = 6; // 随机码长度
$codeArr = [];
$randBase = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
$code_number = 100000;
$time = microtime(true)*1000;
while (true) {
$randCode = genRandomString($codeLen, $randBase);
$codeArr[] = $randCode;
$i++;
if($i >= $code_number){
$codeArr = array_unique($codeArr);
$i = $count = count($codeArr);
if($count >= $code_number){
break;
}
}
}
echo round(microtime(true)*1000-$time,2).'毫秒';
?>