- •1. Условный оператор
- •2. Циклы
- •2.1. Цикл с предусловием While
- •2.2. Цикл с постусловием do while
- •2.3. Цикл со счетчиком For
- •2.4. Альтернативный синтаксис
- •2.5. Вложенные циклы
- •2.6. Операторы break и continue
- •2.7. Цикл перебора массивов foreach
- •3. Инструкция switch-case (конструкция выбора)
- •4. Варианты заданий
Итерация 1 Итерация 2
Если же вместо оператора break использовать оператор continue, будет прервана работа только третьей итерации и мы получим вывод:
Итерация 1 Итерация 2 Итерация 4 Итерация 5 Итерация 6 Итерация 7 Итерация 8 Итерация 9 Итерация 10
Предположим, что у нас есть вложенные циклы, например,
for (...)
{
for (...)
{
for (...)
}
}
Нам нужно прервать работу определенного цикла, например, первого. Тогда как оператор break находится в теле третьего. В этом случае можно передать функции break параметр — номер цикла, например, break(l). Нумерация циклов начинается с единицы.
2.7. Цикл перебора массивов foreach
В четвертой версии PHP появился еше один вид цикла — foreach. Данный цикл предназначен специально для перебора массивов.
Синтаксис данного цикла таков:
foreach(массив as $ключ=>$зкачение) операторы;
Операторы, содержащиеся в теле цикла, будут выполнены для каждого элемента массива. Переменная $ключ будет содержать имя ключа элемента, а переменная $ значение — значение элемента.
Следующий пример отобразит значение массива $GLOBALS, содержащего глобальные переменные (будут выведены как имена переменных, так и их значения):
<?
foreach($GLOBALS as $key=>$value) echo "$key = Svalue\n";
?>
Примечание.
Массив — это упорядоченный набор данных. Каждый элемент массива имеет индекс или ключ. Ключ служит для однозначной идентификации элемента массива. В одном массиве не может быть двух элементов с одинаковыми ключами
В PHP есть один очень полезный стандартный массив $GLOBALS. Ключом данного массива является имя переменной, а значением элемента массива — значение переменной. Об этом важном массиве мы еще не раз поговорим в этой книге.
3. Инструкция switch-case (конструкция выбора)
Нами осталась незамеченной очень важная конструкция — switch-case. Данная конструкция предназначена для выбора действий, в зависимости от значения указанного выражения. Конструкция switch-case чем-то напоминает оператор if-else, который, по
сути, является ее аналогом. Конструкцию выбора нужно использовать, если предполагаемых вариантов много, скажем, больше 5, и для каждого варианта нужно выполнить специфические действия. В этом случае использовать оператор выбора if-else просто неудобно.
Синтаксис switch-case таков:
switch (выражение)
{
case значение1 : команды_1; [break;] ...
case значениеN : команды_N; [break;] [default: команды_по_умолчанию; [break;]]
}
Альтернативный синтаксис конструкции выглядит так:
switch (выражение):
case значение1: команды1; [break;] ...
case значением N: команды_N; [break;] [default: команды_по_умолчанию; [break;]] endswitch;
Работает эта конструкция следующим образом:
1.Вычисляется значение выражения.
2.Просматривается набор значений. Пусть значение_1 равно значению выражения, вычисленного на первом шаге. Если не указан оператор break, то будут выполнены команды i, i+1, i+2, ... ,N. В противном случае (есть break) будет выполнена только
команда с номером i.
3. Если ни одно значение из набора не совпало со значением выражения, тогда выполняется блок default, если он указан.
Небольшой пример:
<? $age=?21;
switch ($age)
{
case 20 : echo "Вам двадцать лет\n"; case 21 : echo "Вам двадцать один год\n"; case 22 : echo "Вам двадцать два года\n"; default: echo "Вам $age лет\n";
}
?>
Если переменная $аgе равна 21, тоща будут выведены строки: Вам двадцать один год Вам двадцать два года Вам 21 лет
Ясное дело, что нам нужно, чтобы программа вывела только одну строку, поэтому нужно использовать операторы break:
<? $age=21;
switch ($age)
{
case 20 : echo "Вам двадцать лет\n"; break; case 21 : echo "Вам двадцать один год\n"; break; case 22 : echo "Вам двадцать два года\n"; break; default: echo "Вам $age лет\n"; break;
}
?>
Если кто-то знает язык Pascal, то в нем была подобная конструкция case, позволяющая указывать диапазоны значений:
case (age)
10..20 : writeln('BaM от 10 до 20 лет'); end;
В PHP такую возможность можно реализовать так (диапазон 20...22):
<? $age=21;
switch ($age)
{
case 20 : case 21 :
case 22 : echo "Вам от 20 до 22\n"; break;
}
?>
4. Варианты заданий
Распечатать на экране монитора таблицу символов, используя только циклы (без массивов)
Вариант 1
A D G J M
M D G J M
M J G J M
M J G D M
M J G D A
Вариант 2
A B C D E F G H I B C D E F G H
C D E F G D E F
E
Вариант 3
I
I G
I G E
I G E C
I G E C A
Вариант 4
A
B C
D E F
G H I J
K L M N O
Вариант 5
A B C D E
Z B C D E
Y Z C D E
X Y Z D E
W X Y Z E
Вариант 6
A B C D E B C D E C D E
D E
E
Вариант 7
A B C D E
E A C D E
E D A D E
E D C A E
E D C B A
Вариант 8
A E D C B
B E D C
C E D
D E
E
Вариант 9
A
B A B
C B A B C
D C B A B C A C B A B C
B A B A
Вариант 10
F
E F
D E F
C D E F
B C D E F
A B C D E F
Вариант 11
F E D C B A E F E D C B D E F E D C C D E F E D B C D E F E A B C D E F
Вариант 12
F
F E
F E D
F E D C
F E D C B
F E D C B A
Вариант 13
A B C D E
E D C B A
B A C D E
E D C B A
A B C D E
Вариант 14
A B C D E
A B C D
A B C
A B
A
Вариант 15
A
A B A
A B C B A
A B C D C B A A B C B A
A B A A