#php
#php
Вопрос:
Что было бы хорошим способом сгенерировать 7 уникальных случайных чисел от 1 до 10. У меня не может быть никаких дубликатов. Я мог бы написать фрагмент PHP для этого (используя rand() и помещая используемые числа в массив), но должен быть быстрый способ сделать это.
любой совет был бы отличным.
Комментарии:
1. Ваш метод, вероятно, подходит. Однако использование
mt_rand()
немного ускорит процесс.
Ответ №1:
- Создайте массив от 1 до 10 (диапазон).
- Расположите их в случайном порядке (в случайном порядке).
- Выберите 7 элементов из массива (array_slice)
Комментарии:
1. Вместо вторых 2 шагов используйте
array_rand(array, 7)
Ответ №2:
Заполните массив десятью элементами (числами от одного до десяти), перетасуйте массив и удалите первые (или последние) три элемента.
Ответ №3:
Простой однострочный:
print_r(array_rand(array_fill(1, 10, true), 7));
Комментарии:
1. Я проголосовал за это, но сгенерированный массив недостаточно случаен, последовательность элементов регулярна!
2. @Масуд М. У вас есть какие-либо ссылки? (просто из любопытства)
3. Проверьте это . Он генерирует как:
Array( [0] => 2 [1] => 4 [2] => 5 [3] => 6 [4] => 7 [5] => 9 [6] => 10 )
4. Ах, вы имеете в виду, что результат отсортирован? Да, это может быть правдой, но не реальной проблемой. Можно
shuffle
использовать массив ввода / вывода, чтобы получить несортированный результат.
Ответ №4:
Ознакомьтесь с комментариями в руководстве по php, для этого есть несколько решений.
Простой из них — это:
$min = 1;
$max = 10;
$total = 7;
$rand = array();
while (count($rand) < $total ) {
$r = mt_rand($min,$max);
if (!in_array($r,$rand)) $rand[] = $r;
}
Комментарии:
1. Не очень эффективно, но легко для понимания.
Ответ №5:
Целые числа? Ну, если вы хотите 7 из 10, тогда вы более эффективно НЕ хотите 3 из 10.
Не стесняйтесь использовать любой из других ответов, но вместо создания 7 чисел начните с 10 и исключите 3. Это, как правило, ускоряет работу более чем в два раза.
Ответ №6:
Метод «shuffle» имеет БОЛЬШУЮ ОШИБКУ. Когда числа большие, перетасовка 3 миллиардов индексов мгновенно ВЫЗОВЕТ ошибку 500. Вот лучшее решение для действительно больших чисел.
function getRandomNumbers($min, $max, $total) {
$temp_arr = array();
while(sizeof($temp_arr) < $total) $temp_arr[rand($min, $max)] = true;
return $temp_arr;
}
Допустим, я хочу получить 10 уникальных случайных чисел от 1 миллиарда до 4 миллиардов.
$random_numbers = getRandomNumbers(1000000000,4000000000,10);
PS: Время выполнения: 0,027 микросекунд