想請問各位前輩
最近在想一件事是
我想要rand一個數字出來後
判斷他有沒跟資料庫裡的數字重複
如果沒重複就存進資料庫
如果有重複就在rand到沒重複
但我卡在有重複就重新執行這裡
我用if (){} else
這樣好像就卡住了
不知道怎麼突破這想法,想請前輩們提點一下
是不太清楚你為啥要這樣弄, 資料量越大重複的機率就會變高
最糟糕的情況你可能要跑很久才能找到一個不重複的數字
所以我給你加了嘗試次數的上限
<pre class="c" name="code">
$attempt = 0;
$max_attempt = 100;
// 嘗試一百次
while (++$attempt <= $max_attempt) {
$number = rand(0, PHP_INT_MAX);
// 自己寫 number_exists 去判斷數字是否重複
if (!number_exists($number)) {
// 數字沒重複, 做你想做的事
// 最後跳出迴圈
break;
}
}
if ($attempt > $max_attempt) {
// 一百次都重複了, 怎麼辦?
}
可以換架構嗎?
先依用途產生一個 SN 表, 例如: 1~10000 .
每次使用時, 從 1~10000 的未使用範圍中, 用亂數取一個, 並將該號碼標為已使用.
當使用率達到 75% 時, 就將 SN 表擴充為 1~20000 .
不能說完全使用亂數, 但至少仍保留一定範圍內讓人無法猜到.