Простой цикл не работает
Я только начал изучать программирование. Я изучаю петли, но
эта программа работает не так, как ожидалось. Я хочу разбить цикл, когда
$a
равно 3
, так что я получаю вывод 1 2
, но я получаю 3
как вывод: (
for($a=0;$a<10;++$a)
{
if($a==3)
break
print"$a ";
}
Пожалуйста, помогите.
Ответы
Ответ 1
Отсутствует полуколония после break
Интересно знать, почему ваша программа ведет себя так, как она себя ведет.
Общий синтаксис break
в PHP:
break Expression;
Выражение не является обязательным, но если его значение указывает, сколько вложенных
должны быть разбиты структуры.
break 0;
и break 1;
такие же, как break;
Ваш код эквивалентен
if($a==3)
break print"$a ";
Теперь функция print
в PHP всегда возвращает 1
. Следовательно, это эквивалентно
if($a==3)
break 1;
поэтому, когда $a
- 3
, вы печатаете его значение и ломаете.
Желательно использовать фигурные скобки, чтобы заключить тело условного или цикла, даже если тело имеет один оператор. В этом случае тело if
находится в фигурных скобках:
if($a==3) {
break
}
print"$a ";
дал бы синтаксическую ошибку: PHP ожидает ;
, но находит }
Все вышеперечисленное относится к PHP continue
. Таким образом, программа
for($a=0;$a<10;++$a)
{
if($a==3)
continue
print"$a ";
}
также печатает 3
по той же причине.
Ответ 2
Вам не хватает точки с запятой в конце перерыва.;)
И даже с точкой с запятой он не будет работать так, как вы ожидали, так как он будет считаться от 0
до 2
. Вы должны написать это так, чтобы получить только 1 2
.
<?php
for($a=1;$a<10;++$a)
{
if($a==3)
break;
print"$a ";
}
?>
Примечание. $a теперь один в инициализации цикла for.
EDIT: Еще одна вещь, которую я заметил, о которой вы должны знать. В вашем управлении циклом вы получаете предварительный приращение (++$a
). Это в основном означает, что PHP увеличивает значение $a
, а затем возвращает $a
. Другим вариантом является post-increment ($a++
), где $a
возвращается, а затем увеличивается на единицу.
В вашем случае оба пути позволят вам получить правильный результат.
Это иногда очень важно. Просто имейте это в виду.
Ответ 3
Как сказал codaddict, вам не хватает полуколонии после перерыва.
Ваш код должен выглядеть так:
for($a=0;$a<10;++$a)
{
if($a==3)
break;
echo $a, ' ';
}
Ответ 4
for($a=0;$a<10;++$a)
{
if($a==3) break;
print $a;
}
@Downvoters: что неправильно, кроме меня, лаконичного?
Ответ 5
for($a=0;$a<10;$a++) {
if($a==3) { exit; }
else { echo $a; }
}
Ответ 6
Используйте echo
вместо print
.