- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
<?php
function randomizer($min, $max, $maxn)
{
// $max = максимальное
// $min = минимально
// $maxn = сколько выдать
$random = array(); // здесь будет массив наших чисел
$tmp = array(); // временный массив
for ($i = 0; $i < $maxn; $i++) {
do {
$a = rand($min, $max);
} while (isset($tmp[$a]));
$tmp[$a] = 1;
$random[] = $a;
}
unset($tmp);
return $random;
}
А при max - min < maxn, будет вечный цикл.
Если интервал достаточно большой то генерить с помощью отсортированного связного списка, у которого голова - минимальный элемент (включительно), а хвост - максимальный (не включается в множество). На каждой итерации pick-ать элемент из интервалов которые образуются 2-мя нодами, и добавлять ноду с выбранным элементом в список.
Ну это какие-то местные традиции, писать кому-то в какие-то несвежие говнокоды. И этот вопрос принято задавать так: "Как ты попал в этот тред?"
https://gcode.space/#!/search?q="Как ты попал в этот тред%3F"
В этом кейсе вообще надо исключение кидать, имхо. Т.к. задача не имеет решений. Ну нельзя из 2 элементов выбрать три без повторов.
foreach -> for -> while -> goto