今天,有朋友咨詢烈火PHP隨機(jī)數(shù)字的問題,這是PHP的基礎(chǔ)問題,大家可以參考一下烈火提供的PHP手冊(cè),由于時(shí)間關(guān)系,小編也懶的寫,在網(wǎng)上找了一些例子,綜合在一起,希望對(duì)大家有所幫助吧,如有問題請(qǐng)?jiān)谙旅嬲f出來。
//seed用戶自定義函數(shù)以微秒作為種子
function seed()
{
list($msec, $sec) = explode(' ', microtime());
return (float) $sec;
}
//播下隨機(jī)數(shù)發(fā)生器種子,用srand函數(shù)調(diào)用seed函數(shù)的返回結(jié)果
srand(seed());
//輸出產(chǎn)生的隨機(jī)數(shù),隨機(jī)數(shù)的范圍為10-100
echo rand(10,100);
?>
上面這個(gè)和下面這個(gè)不是沒什么不同嗎?都是隨機(jī)輸出10-100之間的數(shù),新人學(xué)習(xí),可能問的太簡(jiǎn)單了呵呵
echo rand(10,100);
?>
mt_rand(10,100);
srand是種子,如果不設(shè)的話默認(rèn)是1
rand一般是利用種子做參數(shù)的一種固定的運(yùn)算
你試一下就知道了,不設(shè)種子或者設(shè)一個(gè)固定的種子,運(yùn)行rand
然后再關(guān)了瀏覽器再開,再運(yùn)行rand
你會(huì)發(fā)現(xiàn)結(jié)果一直是一樣的
但是如果用一個(gè)隨機(jī)數(shù)做種子,那每次運(yùn)行結(jié)果就近似于隨機(jī)的
先說rand()函數(shù)吧,rand([int min], [int max]) 本函數(shù)從min和max之間取一個(gè)隨機(jī)數(shù)。若沒有指定隨機(jī)數(shù)的最大及最小范圍,本函數(shù)會(huì)自動(dòng)的從0到RAND_MAX中取一個(gè)隨機(jī)數(shù)。
但是如果只用rand()這個(gè)函數(shù),隨機(jī)數(shù)的亂度很大,每次在取隨機(jī)數(shù)之前最好使用srand()函數(shù),以配置新的隨機(jī)數(shù)種子。
解釋一下下面這個(gè)用法(一般都是這樣用這兩個(gè)函數(shù)的):
srand((double)microtime()*1000000);
$rand_number= rand();
microtime()返回了兩個(gè)值:當(dāng)前毫秒和時(shí)間戳,我們要提取隨機(jī)數(shù),只能從毫秒中取一個(gè)隨機(jī)數(shù),(double)microtime()就只返回當(dāng)前的毫秒值。
microtime()是以秒為單位的毫秒數(shù),因而值都是小數(shù),乘以1000000將其換算為整數(shù)。
;它們的工作流程如下:
(1):首先,給srand()提供一個(gè)”種子”;,它是一個(gè)unsigned_int類型的值。
(2):_然后,調(diào)用rand(),它會(huì)根據(jù)提供給srand()的值返回一個(gè)隨機(jī)數(shù)(范圍在_0~32767之間)
(3):根據(jù)需要多次調(diào)用rand(),不斷得到新的隨機(jī)數(shù)。
(4):無論什么時(shí)候可以給srand()提供一個(gè)新的“種子”,從而進(jìn)一步“隨機(jī)化”rand()的
輸出結(jié)果。
更多信息請(qǐng)查看IT技術(shù)專欄