1、实现方式,使用while循环,比较low,200w条数据 2s
public function getMany ($startNum, $count)
{
$num = $startNum;
$codes[] = $startNum;
for($i=1;$i<=$count;$i++){
$num1 = random_int(1,9);
while($num == $num1) {
$num1 = random_int(1,9);
}
$num = $num1;
$startNum += $num;
$codes[] = $startNum;
}
return $codes;
}
2、实现方式,使用递归,把random_int替换成mt_rand,200w数据0.9s
public function getManys ($num, $count)
{
$codes = [];
$startNum = 0;
for($i = 1;$i <= $count; $i++){
$num = $this->getNotRepeatNum($num, mt_rand(1, 9));
$startNum += $num;
$codes[] = $startNum;
}
return $codes;
}
public function getNotRepeatNum($startNum, $endNum)
{
if($startNum == $endNum) {
return $this->getNotRepeatNum($startNum, mt_rand(1, 9));
}
return $endNum;
}
3、实现方式,上次使用的数据下次不使用,把random_int替换成mt_rand,200w数据0.7s
public function getManys ($startNum, $count)
{
$codes = [];
$num = [1,2,3,4,5,6,7,8,9];
$lastNum = 0;
for($i=1;$i<=$count;$i++){
if($lastNum == 0) {
$startNum += $num[mt_rand(0, 8)];
} else {
$diff = array_diff($num, [$lastNum]);
$startNum += $diff[mt_rand(0, 7)];
}
$codes[] = $startNum;
}
return $codes;
}