Конструкция foreach появилась в PHP4. Она дает вам простой путь для прохода по элементам массива. foreach работает только с массивами, и даст ошибку, если вы попробуете использовать ее для других типов данных или для неинициализированной переменной. Есть две разновидности синтаксиса, второй неосновной, но является хорошим дополнением для первого:
statement
или
statement
В первом случае массив array_expression просматривается поэлементно. На каждом шаге текущий элемент массива присваивается переменной $value и внутренний указатель массива сдвигается на следующий элемент.
Во втором случае происходит то же самое, исключая тот факт, что индекс элемента массива присваивается переменной $key на каждом шаге.
Начиная с PHP5 имеется возможность просматривать объекты тоже.
Замечание:
Когда foreach начинает выполняться, внутренний указатель массива переносится на первый элемент. Это означает, что вам не надо вызывать reset() для массива перед началом foreach.
Замечание:
foreach работает с копиями элементов массива, а не с самим массивом. Использование foreach может иметь некоторые сторонние эффекты для внутреннего указателя массива, не используйте этот указатель в течение foreach и после его выполнения, предварительно не сбросив его.
Начиная с PHP5 вы можете легко модифицировать элементы массива, поставив перед $value префикс &. Тогда этой переменной будет присваиваться ссылка на элемент массива вместо его копии.
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr будет содержать значения array(2, 4, 6, 8 )
unset($value); // сброс ссылки на последний элемент массива
Это можно делать в случае, если на массив можно ссылаться (т.е. использовать переменную в качестве указателя массива), таким образом, следующий код работать не будет:
$value = $value * 2;
}
Предупреждение
Указатель на $value останется даже после того, когда будет просмотрен последний элемент массива. Рекомендуется удалять его с помощью unset().
Замечание:
foreach не поддерживает возможность подавления сообщений об ошибках через @.