Перебор массива в php

Перебор массива в 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.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *