Сгенерировать неповторяющиеся случайные числа PHP
| Введение | |
| Сгенерировать одно случайное число | |
| Несколько разных чисел | |
| Пример | |
| Похожие статьи |
Введение
В этой статье вы можете узнать как получить набор чисел без повторов из определённого диапазона.
Будет использован материал статей про
массивы
и
циклы
Сгенерировать одно случайное число
Одно число можно сгенерировать с помощью функции
random_int()
Синтаксис функции довольно прост:
random_int(НАЧАЛО, КОНЕЦ)
Будет сгенерировано число из диапазона между НАЧАЛО и КОНЕЦ
Например
random_int(0, 1)
Вернёт 0 или 1
Пример функции, в основе которой лежит random_int()
<?php function my_random() { $rand = random_int(0, 2); if ($rand == 0) { $random_text = "Zero"; } else if ($rand == 1) { $random_text = "One"; } else { $random_text = "Two"; } return $random_text; } $text = my_random(); echo $text; ?>
Пример работы этой функции вы можете увидеть обновив эту страницу в браузере несколько раз.
Zero
Сгенерировать несколько разных случайных числа
Допустим, нужно сгенерировать два разных числа от 0 до 9.
Как сгенерировать одно число понятно из предыдущего параграфа.
Чтобы сгенерировать ещё два неповторяющихся числа нужно добавлять каждое
уже сгенерированное в массив и потом заставлять random_int() работать пока
не получится число не из массива.
<?php $arr = array(); while(in_array(($number = random_int(0, 9)), $arr)); array_push($arr, $number); while(in_array(($number = random_int(0, 9)), $arr)); array_push($arr, $number); echo(implode(', ' , $arr)); ?>
В результате получится массив с двумя значениями от 0 до 9 без повторов. Можете обновить эту страницу в браузере и получить другой результат.
9, 8
Если чисел будет много - желательно сделать
цикл
.
Допустим, теперь нужно сгенерировать три неповторяющихся числа от 0 до 9.
<?php $arr = array(); for ($i = 1; $i <= 3; $i++) { while(in_array(($number = random_int(0, 9)), $arr)); array_push($arr, $number); } echo(implode(', ' , $arr)); ?>
2, 0, 4
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги
Пример
Если нужно сгенерировать большое количество случайных чисел нужно воспользоваться
циклом for
Допустим, нужно десять случайных чисел от 0 до 20 без повторов.
<?php $sup = 20; $count = 9; if ($count > $sup) { echo"Невозможно сгенерировать $count разных чисел из $sup"; } else { $arr = unique_numbers($sup, $count); for ($i = 0; $i < $count; $i++) { echo $arr[$i]; echo '<br>'; } } function unique_numbers($sup, $count) { $arr = []; for ($i = 0; $i < $count; $i++) { while(in_array(($number = random_int(0, $sup)), $arr)); array_push($arr, $number); } return $arr; } ?>
Результат работы такого генератора вы можете увидеть ниже - обновите страницу (F5 или CTRL + F5) чтобы повторить генерацию и убедиться, что повторов нет.
5
20
4
7
11
16
2
1
14
Автор статьи: Андрей Олегович
| Программирование на PHP | |
| Вывод всех изображений из директории | |
| Сгенерировать неповторяющиеся случайные числа PHP |