1

Тема: Як запустити цикл while в зворотньому порядку

Як запустити цикл while в зворотньому порядку, пробував так:

$count = 22;
$i = 1;
while($count >= $i){
    echo($i);
    $i--;
}

але тоді цикл не зупиниться, бо підуть від'ємні числа.
Як тоді це виправити, чи написати іншим циклом

Буду вдячний!

2

Re: Як запустити цикл while в зворотньому порядку

 $count = 22;
 $i = 1;
    while($count >= $i){
        echo $count . PHP_EOL;
        --$count;
    }
Подякували: ostap34PHP, 221VOLT2

3 Востаннє редагувалося ReAl (14.05.2017 09:09:55)

Re: Як запустити цикл while в зворотньому порядку

Чисто стилістично тоді вже так (односимвольне ім'я змінної більше асоціюється з тимчасовим лічильником та й у варіанті ходу вгору було ж мабуть $i <= $count?):

$count = 22; // або десь іззовні передано
$i = $count;
while($i >= 1){
    echo($i);
    $i--;
}
Подякували: ostap34PHP1

4 Востаннє редагувалося koala (14.05.2017 13:40:33)

Re: Як запустити цикл while в зворотньому порядку

В PHP є 4 види циклів: while, do... while, for та foreach.
Якщо у вас є чітко і коротко окреслена множина, по елементах якої треба робити цикл - беріть foreach.
Якщо у вас є чітко і коротко окреслені ініціалізація, умова виходу і правило переходу - беріть for.
Якщо цикл має обов'язково пройти 1 ітерацію - беріть do..while.
Нарешті, якщо все, що сказано вище, не годиться - беріть while.
Тобто вам тут треба робити

foreach (range($count, 1) as $i) {
    echo $i;
}

У гіршому разі

for($i=$count; $i>0; $i--) {
    echo $i;
}

while тут явно надмірно узагальнений, хоча, очевидно, будь-який for можна переписати як while.
І не намагайтеся "запустити цикл в інший бік" - це інший цикл з іншими умовами, треба чітко їх формулювати.

Подякували: ADR, ostap34PHP2

5

Re: Як запустити цикл while в зворотньому порядку

Lifehack

    $count = 22;
    $i = 1;
    while($count >= $i){
        echo(-1*$count+$i);
        $i++;
    }
Подякували: ostap34PHP1

6

Re: Як запустити цикл while в зворотньому порядку

$i = $count = 22;

while ($i > 0) {
    echo $i--;
}
Подякували: ostap34PHP1