php. Генерация предсказуемых случайных чисел/значений

Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Предположим, что вы разрабатываете приложение, которое должно отображать пользователю список вопросов и ответов. При этом данный список должен быть условно предсказуем и должен выдавать одни и те же значения с вопросом, чтобы гарантировать повторяемость поведения программы.



Для генерации предсказуемых(заранее известных) значений, необходимо инициализировать генератор случайных чисел с заранее известным значением. Для этого можно воспользоваться функцией mt_srand() или srand().

Предположим, что мы разрабатываем викторину, где должны отображаться вопросы и варианты ответов.
И задаваемый вопрос должен быть простым и условно известен.

Инициализируем массив со списком вопросов и ответов:
$list = [
    [
        'question' => 'Какая столица у португалии?',
        'answer' => 'Лиссабон'
    ], [
        'question' => 'Какой химический символ для серебра?',
        'answer' => 'Ag'
    ], [
        'question' => 'Кто изобрел граммофон?',
        'answer' => 'Эмиль Берлинер'
    ], [
        'question' => 'В какой стране находится Колизей?',
        'answer' => 'Италия'
    ]
];

Создадим генератор вопросов и ответов, который будет динамически выдавать вопрос:
function questionGenerator($list) {
    $i = mt_rand(0, count($list) - 1);

    return $list[$i];
}

Инициализируем генератор случайных чисел и передаем ему целочисленное значение параметра переинициализации (Для примера я передал значение 12345).
Таким образом мы получим заранее заготовленное значение с вопросом и правильным ответом, возвращенное генератором.
mt_srand(12345);

Запустим генератор и выведем заготовленный вопрос:
$data = questionGenerator($list);

print $data['question'] . '<br \>';

Распечатаем весь список ответов:
foreach ($list as $item) {
    print $item['answer'] . ' ';
}

Результат:
Благодаря mt_srand(12345), данный код, при каждом его вызове, будет выдавать всегда один и тот же вопрос.

Если в функцию mt_srand не передавать никакого значения, то вопрос всегда будет разным.

И для демонстрации распечатаем ответ на вопрос:
print 'Правильный ответ: ' . $data['answer'] . '<br>';



Весь код, описанный в данной статье:
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.