为了账号安全,请及时绑定邮箱和手机立即绑定

while 中處理訂單,如何產生不重複的數字?

while 中處理訂單,如何產生不重複的數字?

PHP
萧十郎 2019-03-11 07:31:19
while ($row = mysqli_fetch_array($aa)){ $public_order_id = date('Ymd', time()).rand(1,999999); 因為在一瞬間會產生不止一筆我目前很白痴的做法是用 rand.....但是1,999999 還是有機率重複,因為是用 while 產生訂單!所以搞不好第一筆是產生222,第二十筆也會有 222 的機率!因為使用 time() 沒有用,時間會完全一模一樣,速度太快了除非產生的訂單超過20筆,時間搓個位數可能才會+1而且還要跟數據庫比對,如果有重複則回到上一步驟重新產生?我有一個ID是給程式看的,所以用 AUTO_INCREMENT但現在產生的是要給人看的想問一下更好的方式???
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

1: uuid
2:使用更小的微秒

// 生成一万个
for ($i = 0; $i < 10000; ++ $
    
    do {
        $time = str_replace('.', '', microtime(true));
        // 这样子重复的概率已经比较小了,如果还怕重复,只能手动筛选了
        $key = $time . str_pad(1, 9999, STR_PAD_LEFT);
        
        // 可以装进数组判断,但注意内存
        if (不存在) {
            // 存起来
            break;
        }
        
        // 不存在 继续循环
    } while(true);
    
}
查看完整回答
反对 回复 2019-03-18
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我觉得你这个用date('Ymd').uniqid().rand(10000,99999)够了

查看完整回答
反对 回复 2019-03-18
?
守着一只汪

TA贡献1872条经验 获得超3个赞

订单编号可以拼上用户标识(user_id)和用户订单数。

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 364 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信