На этом шаге мы рассмотрим цикл foreach.
Использованный в примере предыдущего шага массив является лишь частным случаем. На практике обычно встречаются массивы с непоследовательной индексацией. Поэтому используется специальная конструкция foreach, которая появилась только в четвертой версии PHP. В общем случае она выглядит так:
Рис.1. Общий вид конструкции foreach
В этой конструкции мы видим три переменные, среди которых $massiv - это просматриваемый массив. Переменные $key и $value содержат, соответственно, ключ и значение. Итак, поясним ход работы этого оператора цикла на примере:
<?php
$closets = array("Петров" => "Майка",
"Иванов" => "Кроссовки",
"Сидоров" => "Шорты");
foreach ($closets as $key => $value)
{
echo $key . " " . $value . "<br>"; // вывод элемента
}
?>
Результат выполнения программы вы можете увидеть на рисунке 2.
Рис.2. Результат работы скрипта
В первой строке мы создаем массив из трех элементов. Заметьте, что индексация производится с помощью строк. Далее следует конструкция, которая начинается со слова foreach. Затем в круглых скобках помещается рассматриваемый массив, после которого записывается специальное слово as. После него следует пара ключ-значение, разделяемая оператором =>. Итак, на первой итерации переменной $key присваивается ключ первого элемента, а переменной $value - его значение. При следующей итерации в переменные $key и $value запишутся соответственно ключ и значение следующего элемента. И так далее, пока массив не будет пройден полностью.
У вас может возникнуть вопрос о способе реализации этого цикла, так как механизм перемещения по массиву остается скрытым от программиста. Дело в том, что любой массив помимо ключей и значений имеет внутренний указатель (pointer) или курсор, с помощью которого можно узнать, какой элемент мы сейчас рассматриваем. Этим указателем, естественно, можно управлять, то есть переносить его от одного элемента к другому. Для работы с указателем применяются функции reset(), each(), list() и другие.
На следующем шаге мы рассмотрим некоторые из перечисленных функций.