Перебор массива в php
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали, что такое массивы в php. В данной статье я бы хотел рассказать о том, какие существуют способы для перебора массива в PHP. Если речь идёт о списках, то тут всё просто, достаточно воспользоваться простым циклом for:
<?php $myNames = array("Alex", "Gennadii", "Ivan"); for ($i = 0; $i < count($myNames); $i++) echo $myNames[$i]." "; ?>
Пусть у нас имеется ассоциативный массив, ключами которого являются страны, а значениями — их столицы. Необходимо перебрать данный массив. Воспользуемся такой конструкцией:
<?php $capitals = array("Russia"=>"Moscow", "France"=>"Paris","Italy"=>"Rome"); for (reset($capitals); $k = key($capitals); next($capitals)) { echo "Столица $k - $capitals[$k] </br>"; } ?>
В ассоциативных массивах есть такое понятия, как текущий элемент. Функция reset() ставит текущий элемент на первый элемент массива. Функция key() возвращает ключ, который имеет текущий элемент. Функция next() двигается к следующему элементу массива (сдвигает текущую позицию на один элемент вперед). Отсюда вытекает ещё одно свойство массива — это направленность.
Также иногда возникает необходимость перебрать элемент с конца. Пример:
<?php $capitals = array("Russia"=>"Moscow", "France"=>"Paris","Italy"=>"Rome"); for (end($capitals); $k = key($capitals); prev($capitals)) { echo "Столица $k - $capitals[$k] </br>"; } ?>
Функция end() устанавливает позицию текущего элемента в конец массива, а функция prev() сдвигает позицию на один элемент назад.
Это был пример косвенного перебора массива. Косвенным он называется потому, что мы сначала получаем ключ конструкцией $k = key($capitals), а затем по нему косвенно определяем значение $capitals[$k].
Идея прямого перебора заключается в том, чтобы сразу получать и ключ, и значение. Есть старый вариант прямого перебора:
<?php $capitals = array("Russia"=>"Moscow", "France"=>"Paris","Italy"=>"Rome"); for (reset($capitals);list($k,$v) = each($capitals);) echo "Столица $k - $v </br>"; ?>
Функция reset() устанавливает позицию текущего элемента на начало массива. Переменным $k и $v присваивается результат работы функции each(). Данная функция возвращает пару "ключ — значение", и при этом продвигает текущий элемент к следующей позиции. Если следующего элемента нет, то функция возвращает false.
В 4 версии языка PHP была добавлена новая инструкция — foreach:
<?php $capitals = array("Russia"=>"Moscow", "France"=>"Paris","Italy"=>"Rome"); foreach ($capitals as $k=>$v) echo "Столица $k - $v </br>"; ?>
Самый простой вариант перебора. Данный способ рекомендуется использовать везде. Стоит отметить, что цикл foreach перед началом своей работы создаёт копию массива и работает уже с копией. Если мы потом выведем наш массив, то никаких изменений в нём не будет.
Для того, чтобы работать не с копией, а и исходным массивом, необходимо использовать ссылочный тип данных. Для примера: создадим список из трех числовых элементов, затем в цикле foreach возведём данные числа в квадрат. После всего этого выведем список:
<?php $mas = array(4,6,-2); foreach ($mas as $value) $value = $value * $value; foreach ($mas as $value) echo $value." "; //выведется изначальный массив (4,6,-2) ?>
Давайте теперь заставим массив измениться, поставив ссылочный оператор &:
<?php $mas = array(4,6,-2); foreach ($mas as &$value) $value = $value * $value; foreach ($mas as $v) echo $v." "; //выведется новый массив (16,36,4) ?>
В данной статье вы узнали различные варианты перебора массива в php.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.