Данный тип цикла предназначен специально для перебора всех элементов массива и был добавлен только в четвертой версии языка РНР.
foreach (массив as $ключ=>$значение)
команды;
Здесь команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=> значение оказывается в переменных $ключ и $ значение.
<?php ## Вывод всех переменных окружения,
foreach($_SERVER as $k=>$v)
echo "<b>$k</b> => <tt>$v</tt><br>\n";
?>
У цикла foreach имеется и другая форма записи, которую следует применять, когда нас не интересует значение ключа очередного элемента. Выглядит она так:
foreach ($массив as $значение)
команды;
В этом случае доступно лишь значение очередного элемента массива, но не его ключ. Это может быть полезно, например, для работы с массивами-списками. Цикл foreach в форме, рассмотренной выше, оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть "видны" из тела цикла.
Для того чтобы иметь возможность изменять массив изнутри тела цикла, в РНР 5 можно использовать ссылочный синтаксис:
foreach($массив as $ключ=>&$значение)
команды;
Здесь можно изменять $значение, при этом изменяются элементы исходного массива $массив.
Часто вместо нескольких расположенных подряд инструкций if-eise целесообразно воспользоваться специальной конструкцией switch-case:
switch (выражение) {
case значение1: команды1; [break;]
case значение2: команды2; [break;]
case значениеN: командыN; [break; ]
[default: команды_по_умолчанию; [break]]
}
Делает она следующее: вычисляет значение выражения (пусть оно равно, например, v), а затем пытается найти строку, начинающуюся с case v:. Если такая строка обнаружена, выполняются команды, расположенные сразу после нее. Если же найти такую строку не удалось, выполняются команды после default (когда они заданы). Обратите внимание на операторы break (необязательные), добавленные после каждой строки команд, кроме последней. Если бы не они, то при равенстве v=значение1 сработали бы не только команды1, но и все нижележащие.
Альтернативный синтаксис для конструкции switch-case:
switch (выражение) :
case значение1: команды1; [break;]
case значениеЫ: командыЫ; [break; ]
[default: команды_по_умолчанию; [break]]
endswitch;
Эти инструкции позволяют разбить текст программы на несколько файлов. Рассмотрим require. Ее формат такой:
require имя_файла;
При запуске программы интерпретатор просто заменит инструкцию на содержимое файла имя_файла (этот файл может также содержать сценарий на РНР, обрамленный, как обычно, тегами <? и ?>).
Инструкция include практически идентична require, за исключением того, что в случае невозможности включения файла работа сценария не завершается немедленно, а продолжается (с выводом соответствующего диагностического сообщения).