#php
Есть промежуток чисел от [1; 100]. Нужно чтобы php выводил на экран через echo рандомные числа из этого промежутка, но так, чтобы они не повторялись, то есть, если, допустим, php зарандомил число 57, то в дальнейшем php рандомил числа в промежутке от [1;57)V(57;100] (то есть число 57 больше не повторялось)
Ответы
Ответ 1
Самая элеметная реализация $nums = []; for($i = 0; $i < 15; ;){ $num = mt_rand(1, 100); if(!in_array($num, $nums)){ $nums[$i] = $num; $i++; echo $num; } } Данный скрипт выведет 15 раз числа в диапазоне от 1 до 100 каждый раз исключая все прошедшие выпавшие числа, за счёт того, что сохраняет их в массиве и в дальнейшем проверяет, если ли в массиве каждое новое рандомное число, если есть, повторяем и так до тех пор пока оно не будет уникальное, когда число оказалось уникальным, сохраняем его в массиве и выводим. Для сохранения между сессиями браузеров, поместите в $_SESSION массив nums. Пример: session_start(); //... $_SESSION['nums'] = []; for($i = 0; $i < 15; ;){ $num = mt_rand(1, 100); if(!in_array($num, $_SESSION['nums'])){ $_SESSION['nums'][$i] = $num; $i++; echo $num; } }Ответ 2
Для примера привел готовый массив исключений. Его можно хранить в удобном для вас виде (БД, файле, Куках или сессиях), чтобы после перезагрузки страницы он был доступен и добавлялись новые элементы массива в него. После выполнения скрипта нужно снова сохранить этот массив.Ответ 3
Ещё можно так (в три строчки кода, проще уже некуда): Сгенерировать временный массив Перемешать его элементы Выбрать (к примеру) 15 элементов - все они будут случайными Пример: $arr = range(1, 100); shuffle($arr); $arr = array_slice($arr, 0, 15); var_dump($arr);
Комментариев нет:
Отправить комментарий