08.02.2011


Foreach


Категории: Язык — Метки: , — Administrator

Конструкция foreach появилась в PHP4. Она дает вам простой путь для прохода по элементам массива. foreach работает только с массивами, и даст ошибку, если вы попробуете использовать ее для других типов данных или для неинициализированной переменной. Есть две разновидности синтаксиса, второй неосновной, но является хорошим дополнением для первого:

foreach (array_expression as $value)
statement

или

foreach (array_expression as $key => $value)
statement

В первом случае массив array_expression просматривается поэлементно. На каждом шаге текущий элемент массива присваивается переменной $value и внутренний указатель массива сдвигается на следующий элемент.

Во втором случае происходит то же самое, исключая тот факт, что индекс элемента массива присваивается переменной $key на каждом шаге.

Начиная с PHP5 имеется возможность просматривать объекты тоже.

Замечание:
Когда foreach начинает выполняться, внутренний указатель массива переносится на первый элемент. Это означает, что вам не надо вызывать reset() для массива перед началом foreach.

Замечание:
foreach работает с копиями элементов массива, а не с самим массивом. Использование foreach может иметь некоторые сторонние эффекты для внутреннего указателя массива, не используйте этот указатель в течение foreach и после его выполнения, предварительно не сбросив его.

Начиная с PHP5 вы можете легко модифицировать элементы массива, поставив перед $value префикс &. Тогда этой переменной будет присваиваться ссылка на элемент массива вместо его копии.

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr будет содержать значения array(2, 4, 6, 8 )
unset($value); // сброс ссылки на последний элемент массива

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

foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}

Предупреждение
Указатель на $value останется даже после того, когда будет просмотрен последний элемент массива. Рекомендуется удалять его с помощью unset().

Замечание:
foreach не поддерживает возможность подавления сообщений об ошибках через @.





Календарь


Архив