Вопрос по циклам

527
.
# Koenig (15.12.2014 / 12:55)
Garjs, оборвать цикл можно через break
а еще лучше continue;
.
Тему создавать новую не стал, так как вопрос у меня тоже по циклам.
Есть код, который работает верно. Тоесть цикл длится до тех пор, пока переменная $count достигнет значения 12.
$count = 1;
while ($count <= 12) {
echo 'число ' . $count . ' умноженное на 12 равно ' . $count * 12 . '<br />';
$count++;
}

Результат
число 1 умноженное на 12 равно 12
число 2 умноженное на 12 равно 24
число 3 умноженное на 12 равно 36
число 4 умноженное на 12 равно 48
число 5 умноженное на 12 равно 60
число 6 умноженное на 12 равно 72
число 7 умноженное на 12 равно 84
число 8 умноженное на 12 равно 96
число 9 умноженное на 12 равно 108
число 10 умноженное на 12 равно 120
число 11 умноженное на 12 равно 132
число 12 умноженное на 12 равно 144

Я попытался чуть схитрить
$count = 0;
while ($count++ <= 12) {
echo 'число ' . $count . ' умноженное на 12 равно ' . $count * 12 . '<br />';
}

Почему здесь цикл длится до до тех пор, пока переменная $count достигнет значения 13?
число 1 умноженное на 12 равно 12
число 2 умноженное на 12 равно 24
число 3 умноженное на 12 равно 36
число 4 умноженное на 12 равно 48
число 5 умноженное на 12 равно 60
число 6 умноженное на 12 равно 72
число 7 умноженное на 12 равно 84
число 8 умноженное на 12 равно 96
число 9 умноженное на 12 равно 108
число 10 умноженное на 12 равно 120
число 11 умноженное на 12 равно 132
число 12 умноженное на 12 равно 144
число 13 умноженное на 12 равно 156
.
Str@nnik, Потому что:

[~] >>> php -r '$count = 0; while($count <= 12){ echo $count, "\n"; $count++;}'
0
1
2
3
4
5
6
7
8
9
10
11
12
[~] >>> php -r '$count = 0; while($count <= 12){$count++; echo $count, "\n";}'
1
2
3
4
5
6
7
8
9
10
11
12
13
[~] >>>
.
reaper, А, понял. Спасибо
.
ValekS
Ей 25
Str@nnik, в первом варианте у тебя сразу проверяется условие, если оно TRUE выполняется тело цикла, выводится значение переменной и только потом увеличивается. Во-втором случае у тебя проверяется условие цикла, а потом выполняется постфиксный инкремент переменной.
Тоже самое ты получил бы если бы в первом варианте увеличивал переменную перед выводом. В общем измени постфиксный инкремент на префиксный и будет 12 итераций а не 13 - ++$count.

П.С.
Хотя всё же во втором случае сразу выполняется постфиксный инкремент переменной, но так как он постфиксный, он возвращает значение $count до изменения. Т.Е. проверятся с $count 0, а выводится уже 1. В общем главное что ты понял почему так и как с этим бороться. Гг
.
Str@nnik
ValekS, Блин, впервые слышу что инкрименты могут быть постфиксные и префиксные, гг
П.С. Я то понял алгоритм работы в обеих случаях, ведь сам же проверял) просто не думал что будут баги с $count++/++$count
.
Ей 25
Str@nnik, вот тут очень хорошо рассказано и показано: http://www.php.su/learnphp/operators/?id
.
ValekS, Спасибо, почитаю
.
# Jahak (16.12.2014 / 09:28)
а еще лучше continue;
Чем это лучше? break; и continue; - это разные конструкции. Посмотри на примере, как они работают

break (+/-)

continue (+/-)
.
Jahak
ДоХтор, Знаю, просто не выспался тогда, плохо соображал, а исправить или удалить, возможности небыло когда понял, что написал неверно
Всего: 30