Я не понимаю учебник PHP "Ежедневная цитата" - PullRequest
2 голосов
/ 06 декабря 2010

В этом уроке в части Ежедневного вдохновения он говорит:

$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 ]

5 голосов
/ 06 декабря 2010

Большинство генераторов случайных чисел на самом деле не случайны ;следующее число, которое они генерируют, вычисляется с использованием простой, но большой функции из предыдущих сгенерированных чисел.При заполнении ГСЧ ему присваивается «предыдущее» число, поскольку каждый раз они начинаются с одного и того же известного состояния.

4 голосов
/ 06 декабря 2010

До PHP 4.2 вам нужно было «заполнить» рандомизатор, чтобы он действительно был «случайным».Теперь бессмысленно заполнять рандомизатор.

Состояние документов:

Примечание: Начиная с PHP 4.2.0, нет необходимости заполнять генератор случайных чисел с помощью srand ()или mt_srand (), поскольку теперь это выполняется автоматически.

см .: http://php.net/manual/en/function.srand.php

Ваше решение столь же эффективно.

2 голосов
/ 06 декабря 2010

Это просто артефакт из двадцатилетнего урока ( используйте другой! ):

  • Генератор случайных чисел засеян автоматически уже очень давно
  • mt_rand предпочтительнее, чем rand, так как он быстрее и «более случайный» (т. Е. Он дает несмещенные случайные величины в большем количестве градусов)

PS: Я бы рекомендовал использовать array_rand здесь, потому что вам не нужно заботиться о точных ключах.

echo $quotes[array_rand($quotes)];
2 голосов
/ 06 декабря 2010

Идея вызова srand() заключается в предоставлении "лучших" случайных чисел. Но это не обязательно верно, что вызов srand() приносит «более случайные» числа. Так как PHP 4.2 необязательно вызывать srand(), потому что PHP делает это внутренним.

...