Проверка в цикле с учетом предыдущих итераций

Рейтинг: 0Ответов: 1Опубликовано: 25.09.2014

Здравствуйте. Подскажите, как можно сделать так, чтобы здесь не было повторов на каждом шаге:

for($i=0; $i<10; $i++){
     $s = rand(0,10);
}

Ответы

▲ 2Принят

Вариант по вашему вопросу:

$existed_values = array();
$s = rand(0,10); 
for($i=0; $i<10; $i++){ 
  while(isset($existed_values[$s])){//Внимание! Если количество величин меньше, чем число итераций, тут прога уходит в бесконечный цикл! Избежать этого можно, использовав числовые константы вместо чисел.
    $s = rand(0,10); 
  }
  $existed_values[$s] = true;
}

Имхо, то же, что вы хотите, но более правильно:

$sArr = range ( 0 , 10 );
shuffle($sArr);
for($i=0; $i<10; $i++){ 
  $s = $sArr[$i];
}