2014-06-06 70 views
1

我在我的代碼中有一個函數,它使用種子來獲得可預測的(基於種子)隨機數集。mt_srand()和srand() - 是否需要將種子重置爲隨機數?

$seed = 1234; 
mt_srand($seed); 

echo mt_rand(0,10); 
echo mt_rand(0,10); 
echo mt_rand(0,10); 
echo mt_rand(0,10); 

是否需要調用我的函數結束mt_srand()重置回它隨機種子一旦我用它做?

+0

爲什麼你的函數調用'mt_srand()'?我很好奇,如果有可能有更好的方式來完成事情。 – duskwuff

+0

@duskwuff這是一個很好的問題。例如,我想爲給定用戶生成相同的一組隨機數(但對於不同的用戶仍然是隨機的/不同的)。所以在這種情況下,他們可以使用user_id作爲種子。 –

+1

像,你只需要一些與用戶相關的隨機數字?如果是這樣的話(你可以使用'$ salt'作爲一個固定值來獲得這組數字),你可能想考慮一下'unpack(「LLLL」,sha1($ salt。$ user_id))'。 – duskwuff

回答

2

是的。 mt_rand()的狀態是全局的 - 如果你的函數將它設置爲一個固定值,它將在函數退出後保持在該狀態。儘管調用mt_srand()並不理想,因爲這會破壞試圖設置固定種子的任何其他函數,但仍然最好將隨機數生成器置於非隨機狀態。