2010-12-06 51 views
2

this tutorial在每日靈感的一部分,他說:我不明白的PHP「每日報價」教程

$quote = array(
1 => "Quote 1", 
2 => "Quote 2", 
3 => "Quote 3", 
4 => "Quote 4", 
5 => "Quote 5", 
); 
srand ((double) microtime() * 1000000); 
$randnum = rand(1,5); 
echo"$quote[$randnum]"; 

我不明白他在做什麼(直譯)這裏:

srand ((double) microtime() * 1000000); 

你能幫我理解這是什麼嗎?

我知道srand()是:

種子隨機數發生器

但是,爲什麼他這樣做,有什麼的地步了嗎?

順便說一句:我會去像這樣的東西:

<?php 

$quotes = array(

"one", 
"two", 
"three" 

); 

echo $quotes[rand(0,count($quotes)-1)]; 
?> 

這有什麼問題呢?

+0

它只是一個關於是真正隨機的或不啄...... http://www.capuzza.com/detail.php?ID=115293 – acm 2010-12-06 16:32:53

+0

@andre馬託斯也就是從2007年我看來,這是不真的有必要:http://stackoverflow.com/questions/4368616/do-not-understand-php-daily-quote-tutorial/4368656#4368656謝謝! – Trufa 2010-12-06 16:37:19

+0

你說得對,但那是我所知道的(真的過時了!)。這就是爲什麼我發表評論而不是真正的答案!我現在覺得更開明瞭! :-) – acm 2010-12-06 16:41:38

回答

5

大部分隨機數發生器aren't actually random;他們生成的下一個數字是使用以前生成的數字中的一個簡單而又大的函數來計算的。播種RNG給它一個「先前」的號碼,因爲很多時候它們每次都從相同的已知狀態開始。

4

在PHP 4.2之前,你需要'隨機化'種子,以便它實際上是「隨機的」。現在對隨機數發生器沒有意義。

的文檔狀態:

注:自PHP 4.2.0起,沒有 需要種子隨機數發生器 用函數srand()或mt_srand() ,因爲這是現在自動完成。

見:http://php.net/manual/en/function.srand.php

你的解決方案是一樣有效。

2

呼叫srand()背後的想法是提供「更好」的隨機數。但呼叫srand()帶來「更多隨機」數字並不一定是真的。由於PHP 4.2由於PHP在內部執行此操作,因此調用srand()並不是必需的。

2

這僅僅是一個二十多歲的教程神器(使用另外一個!):

  • 隨機數發生器是seeded自動已經很長一段時間
  • mt_rand應優於rand,因爲它更快且「更隨機」(即,它以更多程度給出無偏隨機變量)

PS:我會推薦在這裏修補使用array_rand,因爲你不需要關心確切的鍵。

echo $quotes[array_rand($quotes)];