Проверка в цикле с учетом предыдущих итераций
Здравствуйте. Подскажите, как можно сделать так, чтобы здесь не было повторов на каждом шаге:
for($i=0; $i<10; $i++){
$s = rand(0,10);
}
Источник: Stack Overflow на русском
Здравствуйте. Подскажите, как можно сделать так, чтобы здесь не было повторов на каждом шаге:
for($i=0; $i<10; $i++){
$s = rand(0,10);
}
Вариант по вашему вопросу:
$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];
}