Ваш город: Не указано

PHP - операторы повтора

В программировании есть возможность выполнять определенный участок кода несколько раз. Это необходимо при отображении одинаковых (или похожих) элементов кода, при поиске элементов, значений, сортировке и т.д.

В этом уроке мы подробно разберем следующие темы:

Прежде, чем начать урок, хотим отметить, что все предыдущие уроки по программированию тесно связаны с этой темой. Поэтому если Вы еще не знаете, как работают условия, рекомендуем ознакомиться с предыдущим материалом.
 

PHP - цикл for

Общая структура выглядит следующим образом:

...
for ($i=0;$i<=10;$i++){
echo $i;
}
...

Первый параметр в круглых скобках отвечает за начальное значение переменной. Можно через запятую указать несколько переменных:

...
for ($i=0,$k=5;$i<=10;$i++){
echo $i.'<br>';
}
...

Второй параметр определяет при каком условии цикл будет выполняться.

В нашем случае вывод переменной $i происходит до тех пор, пока переменная $i меньше, либо равна 0. После этого цикл завершится, а в браузере появится список чисел от 0 до 10.

Третий позволяет запустить действие после выполнения операций, заданных в теле цикла. В нашем случае переменная $i увеличивается на 1.

Однако, все эти параметры не являются обязательными. В любое время их можно опустить:

...
$i=0;
for (;;){
$i++;
echo $i.'<br>';
}
...

В цикле нет условий, но выполняться он будет, неизвестно, до какого времени или условия. Такой цикл называется бесконечным.

При необходимости, счетчик может не только увеличиваться, но и уменьшаться в обратном порядке:

...
for ($i=9;$i>=0;$i--){
echo $i.'<br>';
}
...

Если необходимо увеличивать счетчик через произвольное значение (например, 10), можно воспользоваться следующим вариантом:

...
for ($i=0;$i<=100;$i+=10){
echo $i.'<br>';
}
...

Как видим, действия $i=$i+10 и $i+=10 выполняются абсолютно одинаково. Они отличаются от действия $i++ лишь тем, что оно позволяет увеличивать значение переменной только на 1.
 

PHP - цикл while

Общая структура выглядит следующим образом:

...
$a=0;

$b=3;
while ($a<$b){
$a=$a+1;
echo $a;
}
...

Этот цикл состоит из условия, заключенного в круглые скобки. Он будет выполняться при истинности этого условия. Читается обычно следующим образом: "Пока переменная a меньше переменной b, выполнить..."

Еще этот while называют циклом с предусловием. Разница видна в следующем примере:

...
$a=3;

$b=0;
while ($a<$b){
$a=$a+1;
echo $a;
}
...

Так как условие не является истинным (3 не меньше, чем ноль), то цикл ни разу не выполнится.
 

PHP - цикл do-while

Структура очень похожа на предыдущую (while), с одним лишь отличием - в начале ставится ключевое слово do, а while указывается в самом конце:

...
$a=0;

$b=3;
do{
$a=$a+1;
echo $a;
}while ($a<$b);
...

Его довольно часто называют циклом с постусловием, так как он обязательно хотя бы один раз выполняется:

...
$a=3;

$b=0;
do{
$a=$a+1;
echo $a;
}while ($a<$b);
...

В этом примере вначале отображается цифра 4, а потом происходит сравнение чисел (4 и 0), и цикл завершается.
 

break (прерывание цикла)

В случае, если оператор повтора необходимо прервать (остановить) в определенном месте, используется функция break:

...
for ($i=0;$i<10;$i++){
if ($i==5){
echo $i;
break;
}
}
...

Таким образом в браузере мы увидим только цифру 5. После этого программа выйдет из цикла, и он сразу завершится.

Но что, если поменять строку echo и break местами?

...
for ($i=0;$i<10;$i++){
if ($i==5){
break;
echo $i;
}
}
...

В этом случае в браузере ничего не отобразится, так как сначала цикл завершится, а вывести ничего не успеет.

При использовании нескольких (вложенных) циклов, функция break завершает только один цикл, внутри которого она и находится:

...
for ($i1=0;$i1<10;$i1++){
for ($i2=$i1;$i2<10;$i2++){
echo $i2;

if ($i2==5){
break;
}
}
}
...

Break действует на все виды циклов.
 

Блок схема цикла с предусловием (while)

Так как цикл имеет условие, логично обозначить его в виде ромба, а тело цикла - в виде прямоугольника. Для обозначения повтора, прямоугольник обратно соединяется с ромбом. Если выражение условия становится ложным - цикл завершается.

PHP. Блок-схема while с предусловием
 

Блок схема цикла с постусловием (do-while)

Данная схема очень похожа на предыдущую с одним нюансом - сначала выполняется код в теле цикла (обозначен прямоугольником). Затем проверяется условие. Если оно истинно - всё повторяется, если нет - завершается.

PHP. Блок схема do-while с постусловием

Задания:

  • Найти квадрат нечетных чисел.
  • Найти сумму делителей числа a.
  • Проверить, является ли число совершенным (равным сумме всех его делителей).
  • Выяснить, является ли введенное число неполным (делится только на себя и на единицу)

Ответы к заданиям предыдущей статьи (про условный оператор if):

  • Дан номер месяца (1-12). Отобразить в виде слова этот месяц. Если такого месяца не существует - отобразить ошибку.

Эта задача имеет несколько способов решения. Через условия делается очень просто: проверяем, ввел ли пользователь цифру 1. Если да (условие истинно) - выводим январь. Если нет - проверяем, ввел ли пользователь цифру 2 и т.д. В конце, если пользователь ничего не ввел - выдаем ошибку.

Пусть за введенное пользователем число отвечает переменная $n. Тогда программа будет выглядеть следующим образом:

<?
$n=4;
if ($n==1){
  echo 'January';
} else
if ($n==2){
  echo 'February';
} else
if ($n==3){
  echo 'March';
} else
if ($n==4){
  echo 'April';
} else
if ($n==5){
  echo 'May';
} else
if ($n==6){
  echo 'June';
} else
if ($n==7){
  echo 'July';
} else
if ($n==8){
  echo 'August';
} else
if ($n==9){
  echo 'September';
} else
if ($n==10){
  echo 'October';
} else
if ($n==11){
  echo 'November';
} else
if ($n==12){
  echo 'December';
} else {
  echo 'Error: number month not found!';
}
?>

  • Найдите среднее арифметическое, состоящее из 5 чисел.

Так как даны 5 чисел, значит понадобятся 5 переменных. Находим в Интернете формулу для вычисления среднего арифметического значения (для его нахождения необходимо сложить все числа и разделить на их количество). Получилась следующая простая программа:

<?
$a=4;
$b=2;
$c=5;
$d=4;
$e=3;
echo (($a+$b+$c+$d+$e)/5);
?>

Опубликовано: 2018-10-30 15:08:28