PHP Уникальные случайные числа

#php

#php

Вопрос:

Что было бы хорошим способом сгенерировать 7 уникальных случайных чисел от 1 до 10. У меня не может быть никаких дубликатов. Я мог бы написать фрагмент PHP для этого (используя rand() и помещая используемые числа в массив), но должен быть быстрый способ сделать это.

любой совет был бы отличным.

Комментарии:

1. Ваш метод, вероятно, подходит. Однако использование mt_rand() немного ускорит процесс.

Ответ №1:

Комментарии:

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 микросекунд