Генерация N различных случайных чисел в заданном диапазоне

Agatov

Новичок
Генерация N различных случайных чисел в заданном диапазоне

Алгоритм такой


PHP:
$M = 5;
$N = 100;


$array = array();

for($i=1; $i <= $M; $i ++)
{
$rand = mt_rand(1, $N);


// Проверяем число на уникальность

$c = count($array);

for($j=0; $j < $c; $j ++)
{

// Если такое число уже было
if($rand == $array[$i])
{

// Генерируем новое случайное число
$rand = mt_rand(1, $N);

// обнуляем счётчик вложенного цикла. И проводим проверку заново.
$j = 0;
}

}

// Если проверка пройдена, то добавляем число в массив 

$array[] = $rand;

}

Правилен ли он? Сомнения возникли потому, что при $M=2 и $N=3, например, возможны ситуации, когда скрипт "подвисает", т.е. генерирует заново одно и то же число раз 50.
 

zerkms

TDD infected
Команда форума
Генерация N различных случайных чисел в заданном диапазоне
если диапазон не слишком большой - то сгенерь массив через range() и перемешай shuffle()
 

Фанат

oncle terrible
Команда форума
ба. неужели тема настолько сложная, что вызвала целое обсуждение на каком-то другом форуме, и на которое стоит давать ссылку?
 

zerkms

TDD infected
Команда форума
dark-demon
на клубе обсуждение вызывает всё. даже обсуждение тобой того, что " "настолько сложные темы" обсуждения не вызывают "
 

dimagolov

Новичок
Agatov, проверять на наличие числа в массиве стоит все же in_array.
А выброк по 2 из 3-х есть всего 3 шт (без учета порядка).
 
Сверху