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;
}