Вконтакте Facebook Twitter Лента RSS

Случайные числа. Применение функции PHP random Использование функции времени

Технически термин «генератор случайных чисел» – это абсурд, так как числа сами по себе не являются случайными. Например, 100 – это случайное число? А 25? Что в действительности означает этот термин, так это то, что создается последовательность чисел, появляющихся случайным образом. Это порождает более сложный вопрос: что такое последовательность случайных чисел? Единственно правильный ответ: последовательность случайных чисел – это последовательность, в которой все элементы являются несвязанными. Это определение приводит к такому парадоксу, что любая последовательность может быть как случайной, так и неслучайной в зависимости от того, как эта последовательность получена. Например, следующая строка чисел
1 2 3 4 5 6 7 8 9 0
была получена печатанием верхней строки клавиатуры по порядку, таким образом, последовательность не может рассматриваться как сгенерированная случайным образом. Но как быть, если вы получите ту же самую последовательность, вынимая пронумерованный теннисные шары из бочонка. В данном случае это уже случайным образом сгенерированная последовательность. Данный пример показывает, что случайность последовательности зависит от того, как она была получена, а не от нее самой.

Помните, что последовательность чисел, сгенерированная компьютером, является детерминированной: каждое число, кроме первого, зависит от предшествующих чисел. Технически это означает, что компьютером может быть сгенерирована только квазислучайная последовательность чисел, т.е. на самом деле они не являются истинно случайными. Однако, этого достаточно для большинства задач и такие последовательности для простоты будут называться случайными. Один очень интересный метод был разработан Джоном фон Нейманом; его часто называют среднеквадратичным. В данном методе предыдущее случайное число возводится в квадрат, а затем из результата выделяются средние цифры. Например, если вы создаете числа из трех цифр, а предыдущее число было 121, то возведение в квадрат дает результат 14641. Выделение трех средних цифр дает следующее случайное число 464. Недостатком данного метода является то, что он имеет очень короткий период повторения, называемый циклом. По данной причине данный метод сегодня не используется. Современные методы генерации случайных чисел значительно сложнее.

Случайные числа в PHP

В PHP есть две группы функций по работе со случайными числами. Чисто внешне их можно отличить по префиксу mt_ у всех функций одной из групп.

Устаревшие функции
Функция rand. Возвращает целое число от нуля до значения RAND_MAX (которое равно 32767). Может иметь два необязательных целых параметра - если они указаны, то генерируется случайное число от первого параметра до второго.

Echo rand(); echo rand(1,100); // Выдаем случайное число от 1 до 100

Функция srand. Задает последовательность случайных чисел, выдаваемую функцией rand. Имеет целый параметр - при разных значениях этого параметра rand будет выдавать разные последовательности чисел. Функцию srand достаточно вызвать только один раз перед всеми вызовами функции rand. Пример использования:

Srand(1288); // Инициализация генератора случайных чисел for($i=0; $i= 3.0.6, PHP 4, PHP 5)

Описание:

Int mt_getrandmax (void)

Показывает максимальное значение, которое может быть возвращено функцией mt_rand()

mt_rand()

Генерирует лучшее случайное значение (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Описание:

Int mt_rand ()

Многие генераторы случайных чисел старых версий имеют сомнительные характеристики и работают медленно. По умолчанию PHP использует генератор случайных чисел функции rand(). Функция mt_rand() является хорошей ее заменой. Она использует рандомный генератор чисел, работающий в 4 раза быстрее, чем rand(), и использующий Mersenne Twister.

Вызванная без необязательных аргументов min и max, mt_rand() возвращает псевдо-случайное значение, расположенное между 0 и RAND_MAX. При необходимости получить, к примеру, случайные значения между 5 и 15 включительно, ишется mt_rand (5, 15).

Пример применения mt_rand()

Результатом выполнения данного примера будет что-то подобное:

1604716014
1478613278
6

Замечание

Замечание : В версиях до 3.0.7 второй параметр функции указывал диапазон чисел. Например, для получения случайных чисел между 5 и 15 в этих версиях требуется задать функцию mt_rand (5, 11).

mt_srand()

Устанавливает начальное значение лучшего генератор случайных чисел (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Описание:

Void mt_srand ()

Устанавливает начальное значение генератора случайных чисел с помощью seed. Начиная с PHP 4.2.0, seed не является обязательной, и установки по умолчанию для случайных значений опускаются.

Пример использования mt_srand()

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

У меня уже спрашивали пару раз, как я делаю случайный вывод цитат у себя на сайте в блоке "Умные цитаты ". Далее мне удалось выяснить, что проблема здесь с непониманием людей, как вывести случайный элемент из массива в PHP . Задача простая, но тем не менее, раз возникают вопросы, то надо на них отвечать.

Сразу приведу код. Допустим, есть массив с набором цитат. И нужно выбрать одну случайную из них и вывести:

Ключевой момент - это получение случайного числа . Всё, что нужно сделать, это задать правильные границы. Если нужно выбрать на всей длине массива случайный элемент, то это от 0 до (длины массива минус 1 ). А далее просто вытащить элемент из массива с полученным случайным индексом .

Что касается задачи с цитатами, то их лучше хранить в базе данных. В принципе, если сайт совсем простой, то можно и в текстовом файле. Но если в базе данных, то лучше использовать RAND() и LIMIT в SQL-запросе , чтобы Вы сразу получали единственную и случайную цитату из базы данных.

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

Случайность и уникальность

Функция PHP random представлена двумя вариантами: rand() и mt_rand(). Считается, что алгоритм в первом случае более прост и генерирует псевдослучайные числа. Второй вариант имеет более быстрый алгоритм и известные математические характеристики. В большинстве случаев, когда нужно получить случайное число, можно использовать серию вызовов PHP random и получить уникальную комбинацию цифр.

Если взять за основу цифры от 1 до 26 или от 1 до 32 и получать их случайным образом, то можно сформировать ключевую информацию как последовательность букв латиницы или кириллицы. В этом случае PHP random - это способ формирования последовательности алфавитной информации, например, для целей тестирования каналов связи или алгоритмов.

Случайное число редко бывает уникальным, поскольку оно может появляться многократно согласно закону распределения случайной величины. Но если совместить, в частности, статическую переменную PHP & Math.random языка JavaScript, то можно получить реальное уникальное случайное число, которое не будет повторяться во времени.

Использование функции времени

Функция времени, как PHP, так и JavaScript, позволяет формировать уникальные комбинации цифр, редко когда в один момент времени может произойти достаточно большое количество событий и случайная величина будет повторяться.

Применяя PHP random в диапазоне секунд или миллисекунд при большом диапазоне возможных значений, можно получить уникальные случайные комбинации цифр или букв. Что еще?

Сочетая значение функции времени, последовательно растущее число и PHP random или можно обеспечить надежную безопасность каналов связи клиента и сервера, создать уникальные коды для переменных, сформировать непредсказуемые события в алгоритмах.

Генератор случайных чисел PHP - отличное решение для большинства задач, особенно когда нужно быстро получить качественный результат с минимальными затратами. Использование функций rand() и mt_rand в совокупности с последовательно растущими рядами чисел или значениями времени позволяет получить случайные числа как повторяющиеся по значениям, так и уникальные.

Всем привет! В этой статье мы рассмотрим, что нового появилось для генерации случайных чисел в PHP 7.1 .

Это обновление произошло невидимо для разработчиков, однако улучшило язык программирования PHP в области генерации случайных чисел.

Насколько известно, в PHP мы можем использовать функцию rand(min, max) для генерации случайных чисел:

Echo rand(7, 17);

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

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

В PHP 7.1 эта проблема была исправлена и была добавлена функция mt_rand() :

Echo mt_rand(7, 17);

Эта функция работает гораздо лучше, включая безопасность. Что также важно знать, это то, что, если вы используете функцию rand() в PHP 7.1 , то она автоматически будет перезаписана на mt_rand() . Т.е. rand() теперь просто алиас для mt_rand() .

Многие другие функции для получения случайных результатов были улучшены в PHP 7.1 . Например, давайте рассмотрим, как мы можем получить случайное значение из массива:

$names = ["Ivan", "Alexander", "Vasiliy"];
echo $names;

Т.е. любые функции, такие, как эта, были улучшены для получения более качественных случайных чисел в PHP 7.1 . Да, это обновление прошло незаметно, но, на каком бы вы языке не писали, очень важно понимать, что происходит внутри какой-нибудь функции и как она себя ведет.

© 2024 Вопросы и ответы