Re: [請益] 怎麼保証不會產生重覆的亂數
※ 引述《knives ()》之銘言:
: 如果我要產生一萬筆(可能更多 )
: 而裡面的資料是由
: 一個陣列像這樣
: $my_array = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm',
: 'n', 'p', '2', '3', '4', '5','6','7','8','9');
: 利用array_rand的方式 亂數抓10個出來
這裡小小提醒一下, array_rand 不會產生重複字母的字串
例: 'abacda', 所以你能產生的亂數會比較少,
但即使這樣, 以上的 $my_array 組合應該也夠用
離題了 ...
: 再把它組合成一個字串,再把字串寫入到資料庫去
: 之前,我是在寫入到資料庫的時候,又做一次select count 的sql 查詢
: 可是發現這樣子,整個網頁很容易當(還沒到php 的timeout時間就掛了)
: 拿掉之後,就比較不會當了
^^^^^^^^^^
所以是偶爾會當, 還是要找解決根本的辦法
: 但是我要怎麼確保這些字串絕對不會重覆到,如果不做查詢的話
不做查詢的話, 是一定會重複的
如果假設程式跑了成千上萬次, 資料庫已有上億筆資料 (甚至兆)
array_rand 產生出來的亂數很難不跟已有的資料重複
建議方案 (但不一定實用)
把所有 $my_array 的組合先塞入資料庫,
例:
table: id_tracker
id | is_used
--------------------------
'abcdefg' 0
'abcdefh' 0
要產生亂數時:
SELECT id
FROM id_tracker
WHERE is_used = 0
ORDER BY rand()
LIMIT 10000
應該在短時間內就可以完成
之後要再
UPDATE id_tracker
SET is_used = 1
WHERE id IN (剛剛產生的亂數)
缺點: 一開始塞資料超費時, 筆數又多
優點: 可以每次快數產生亂數 不再 timeout
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.158.57.59
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章