订单编号,递增且不连续(php版)

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值