2

本教程的每日灵感部分,他说:

$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)];
?>

这有什么问题吗?

4

4 回答 4

5

大多数随机数生成器实际上并不是随机的;他们生成的下一个数字是使用一个简单而大的函数从先前生成的数字中计算出来的。播种 RNG 会给它一个“以前的”编号来工作,因为很多时候它们每次都从相同的已知状态开始。

于 2010-12-06T16:32:13.673 回答
4

在 PHP 4.2 之前,您需要“播种”随机发生器以使其真正成为“随机”。现在播种随机数是没有意义的。

文档状态:

注意:从 PHP 4.2.0 开始,无需使用 srand() 或 mt_srand() 为随机数生成器播种,因为现在这是自动完成的。

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

您的解决方案同样有效。

于 2010-12-06T16:32:41.493 回答
2

调用背后的想法srand()是提供“更好”的随机数。但呼叫srand()带来“更随机”的数字并不一定是真的。因为PHP 4.2调用不是必需的,srand()因为 PHP 在内部执行此操作。

于 2010-12-06T16:33:13.797 回答
2

这简直是​​一个二十年前的教程的神器(使用另一个!):

  • 随机数生成器已经自动播种很长时间了
  • mt_rand应该优先于rand,因为它更快且“更随机”(即它提供更多程度的无偏随机变量)

PS:我建议array_rand在这里使用,因为您不需要关心确切的键。

echo $quotes[array_rand($quotes)];
于 2010-12-06T16:57:40.630 回答