Итак, я знаю, что циклы «while» вычисляются в начале и, следовательно, не всегда запускаются, а циклы «do while» оцениваются в конце и, следовательно, всегда выполняются, но что, если я хочу комбинацию: цикл оценивается в конец, но не всегда работает? Я не вижу способа сделать это без некоторого довольно неэффективного кода, такого как:
while($x < $y)
{
$x = $x + 100;
$while = "true";
}
if($while == "true")
{
$x = $x- 100;
}
…когда я действительно хотел бы, чтобы первый цикл while завершился во время итерации, ДО того, как $ x превысит $ y. Я полагаю, что я мог бы также сделать это с помощью оператора «if» в первом цикле «while», но это также кажется довольно неуклюжим и неэффективным. Какие-либо предложения?
Возможно, вы просто ищете способ «вернуться назад на одну петлю»? Тривиальный способ сделать это — сохранить предыдущую итерацию и восстановить значение последней «предыдущей итерации» после окончания тела цикла.
$z = 0;
while ($x < $y) {
$z = $x;
$x += 100;
}
$x = $z;
Другой возможный вариант — уточнить ваше намерение в условии цикла:
while (($x < $y) and (($y-$x)>100)) { $x += 100; }
Вы могли бы использовать $continue
логическое значение.
$continue = true;
while($x < $y && $continue) {
// do stuff
$continue = (/* some comparison such as, $y > 100 */);
}
Не слишком сложно.