Как стать автором
Обновить

Совершенно случайные числа без повторения

Время на прочтение 1 мин
Количество просмотров 3.4K

Задача


Сегодня столкнулся с задачей сделать 4 случайных числа в заданном диапазоне, без повторения, казалось бы такая тривиальная задача, но!
Обычное rand($min, $max) не давало нужного результата, особенно при малом числе $max ~ 15;
То есть:

$number[0] = rand(1, $max);
$number[1] = rand(1, $max);
$number[2] = rand(1, $max);
$number[3] = rand(1, $max);


Могло в итоге выдать 2, 2, 3, 9 — эти повторения мне нужны не были, спросив совета на хабраканале, freefd дал ссылку на перловый вариант cookbook, но реализация мне не понравилась своей громозкостью и нелапидарностью.

Решение


В итоге проявив смекалку появилось вот такое решение:

function generateFourRandomNumber ($maxCount){
$numbers = range(1, $maxCount);
shuffle($numbers);
return array($numbers[0], $numbers[1], $numbers[2], $numbers[3]);
}


Итого


Вуаля! Просто лапидарно, и даже странно :)
несколько НО:
  • решение подходит для малых максимальных значений, иначе потом shuffle будет стоить слишком дорого
  • функцию легко переделать по вид generateRandomNumber ($maximum, $count)


UPD


Спасибо duncanf1 за еще более короткий вариант:
function generateRandomNumber ($maximum, $count){
return array_rand(range(0, $maximum), $count);
}
Теги:
Хабы:
0
Комментарии 23
Комментарии Комментарии 23

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн