Php рандомного числа від 1 до 10. Що нового в PHP7.1: генерація випадкових чисел. Випадкові числа у JavaScript

У мене вже питали кілька разів, як я роблю випадковий висновок цитат у себе на сайті в блоці "Розумні цитати". Далі мені вдалося з'ясувати, що проблема тут з нерозумінням людей, як вивести випадковий елемент із масиву в 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 в сукупності з рядами чисел, що послідовно зростають, або значеннями часу дозволяє отримати випадкові числа як повторювані за значеннями, так і унікальні.

Здійснює ініціалізацію генератора випадкових чисел. Синтаксис:

Void srand (int seed)

Ініціалізує генератор випадкових чисел значенням seed.

Srand((double) microtime()*1000000);
$ random = rand ();
echo $random;

GETRANDMAX

Повертає максимально можливе випадкове число. Синтаксис:

Int getrandmax()

Ця функція повертає максимальне значення, яке можна отримати за допомогою функції створення випадкових чисел rand().

Зазвичай це 32767

Здійснює генерацію випадкового числа. Синтаксис:

Int rand(])

У разі виклику з необов'язковими параметрами min і max ця функція генерує випадкове число, що лежить у межах цих параметрів включно. Якщо параметри min та max відсутні, повертається число, що лежить у межах від 0 до RAND_MAX.

Для коректної роботи цієї функції перед її використанням необхідно проініціалізувати генератор випадкових чисел функцією srand().

lcg_value()

LCG-генератор псевдо-випадкових чисел (PHP 4, PHP 5)

Опис:

Float lcg_value (void)

lcg_value() повертає псевдовипадкове число в діапазоні (0, 1). Функція поєднує два генератори з 2^31 - 85 і 2^31 - 249 у періоді.

mt_getrandmax()

Показує найбільш можливе випадкове значення (PHP 3> = 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(), оскільки це відбувається автоматично.

Технічно термін «генератор випадкових чисел» – це абсурд, оскільки числа власними силами є випадковими. Наприклад, 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; $iquery("SELECT COUNT(*) AS count FROM quotes");
if ($row = $sth->fetchRow()) (
$count = $row;
) else (
die ($row->getMessage());
}
$ random = mt_rand (0, $ count - 1);
$sth = $dbh->query("SELECT quote FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) (
print $row.

"\n";
}

Цей фрагмент коду визначає загальну кількість рядків у таблиці, генерує випадкове число з цього діапазону, а потім використовує LIMIT $random,1 для вибору одного рядка з таблиці (SELECT), починаючи з позиції $random. У MySQL версії 3.23 або вище можливий альтернативний варіант:

$sth = $dbh->query("SELECT quote FROM quotes ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
print $row. "\n";
}

У цьому випадку MySQL спочатку має рядки у випадковому порядку, а потім повертає перший рядок.