Resident234
@Resident234
Back-End . PHP . Bitrix

Как заполнить массив случайными неповторяющимися числами?

Нужно заполнить массив случайными неповторяющимися целыми числами. Функция rand() c этим не справляется - в массиве обнаруживается много одинаковых чисел. Какие есть ещё аналоги ?
  • Вопрос задан
  • 4011 просмотров
Пригласить эксперта
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Заполнить массив, прибавляя rand() к значению предыдущей ячейки. Если надо - после заполнения нормировать массив, исходя из значений первой и последней ячеек.
Ответ написан
Комментировать
alsopub
@alsopub
Попробуйте так:
$max_num = 10000000;
$num_count = 100000;

$array = [];

while (count($array) < $num_count) {
  $r = rand(0, $max_num);
  $array[$r] = 1;
}

$array = array_keys($array);

Вроде не особо затратно по ресурсам на мой взгляд.
Можно while заменить на for, но придется проверять $r чтобы еще не был занят.
Ответ написан
@Ali_Suleymanov
Студент, новичок в программировании.
$ar = array ();
for ($i=1; i<10000; $i++){
$r = rand(0,X);
if (in_array($r, $ar)){
continue;
}
$ar[]=$r;
if (count($ar)>= X)
break;
}
echo "
";
print_r($ar);
echo "
";

вместо Х пишите количество чисел.
Ответ написан
Комментировать
@lsmacox
function fillArrayNumbers(int $count = 100): array
{
   $arr = [];

   for ($i = 0; $i < $count-1;)
   {
       $alreadyThere = false;
       $newRandomValue = random_int(0, $count);

       for ($j = 0; $j < $i; $j++)
       {
          if ($arr[$j]==$newRandomValue)
          {
              $alreadyThere = true;
              break;
           }
        }

        if (!$alreadyThere)
        {
           $arr[$i] = $newRandomValue;
           $i++;
        }
    }

    return $arr;
}


Берём и пользуемся=);

Лучше этого скрипта вы не найдете :-).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы