Продолжаем изучение массивов. В прошлых статьях мы уже научились объявлять массивы; разобрались: для чего они нужны и где могут использоваться; познакомились с многомерными и ассоциативными массивами. Теперь самое время поговорить о переборе элементов массива.
Зачастую бывает необходимо перебрать все элементы массива и проделать с ними какое-либо действие.
Делать это можно по-разному: при помощи циклов и без. Например, в прошлой статье мы получали все ключи ассоциативного массива, перебирали и выводили их при помощи цикла foreach. Там мы не стали останавливаться на теме перебора элементов массива при помощи цикла, потому что это достойно отдельной темы.
Сегодня, как раз, мы и поговорим о том, как можно перебирать элементы массива. Вы познакомитесь с достаточным количеством новых функций. Ну что ж, давайте начнем!
Для начала поговорим о переборе элементов массива при помощи циклов.
Для этого используются 3 вида циклов for, foreach и while.
Перебор элементов массива. Цикл for()
Для перебора элементов массива-списка, можно сделать следующее:
1. Сначала мы объявляем сам массив;
2. Далее узнаем число элементов массива и заносим это значение в переменную;
3. После объявляем цикл for, где в круглых скобках устанавливаем счетчик (объявляется переменная «i» со значением ноль, если эта переменная меньше общего числа элементов массива, то каждую итерацию значение «i» будет увеличиваться на единицу);
4. А в теле цикла уже можно прописать, что делать с каждым элементом массива. Можно, например, просто вывести их на экран.
Все вышеперечисленное иллюстрирует следующий код:
<?php $Mass[] = 'One'; $Mass[] = 'Two'; $Mass[] = 'Three'; $count = count($Mass); for ($i=0; $i<$count; $i++) { echo $Mass[$i] . '<br>'; } ?>
В результате его выполнения мы увидим на экране значения элементов массива, выведенные каждое с новой строки.
Цикл for и ассоциативные массивы
А вот для перебора элементов ассоциативного массива такой способ уже не подойдет по той простой причине, что индексами ассоциативного массива являются не числа, а строки.
Чтобы перебрать элементы ассоциативного массива в цикле for можно воспользоваться следующей конструкцией:
<?php $Mass['One'] = 1; $Mass['Two'] = 2; $Mass['Three'] = 3; for (reset($Mass); ($key = key($Mass)); next($Mass)) { echo $key. '=>' .$Mass[$key] . '<br>'; } ?>
Как видите, мы объявили ассоциативный массив.
Далее в цикле for мы используем три новые функции:
reset() – устанавливает указатель на первый элемент массива;
next() – перемещает указатель на один элемент массива вперед;
key() – возвращает ключ текущего элемента массива.
А потом в теле цикла мы выводим индекс элемента массива, стрелку и значение элемента массива. Каждую пару индекс-значение выводим с новой строки.
Также вместо reset() можно использовать end(), тогда указатель будет установлен на последний элемент массива. Но в таком случае нужно и вместо next() использовать prev(), чтобы перемещать указатель не вперед, а назад.
Так мы можем перебрать элементы ассоциативного массива в обратном порядке.
Как Вы, наверное, знаете, цикл for используется далеко не только для работы с массивами.
А вот следующий цикл, который мы рассмотрим применяется как раз исключительно для работы с массивами.
Перебор элементов массива. Цикл foreach()
Цикл foreach() позволяет нам работать как с обычными массивами-списками, так и с ассоциативными.
Вот пример работы цикла для перебора элементов простого массива-списка с выводом всех значений элементов массива на экран.
<?php $Mass[] = 'One'; $Mass[] = 'Two'; $Mass[] = 'Three'; foreach($Mass as $key) { echo $key . '<br>'; } ?>
В итоге на экране мы увидим все значения элементов этого массива.
Для ассоциативного массива эта конструкция останется точно такой же (за исключением, конечно, что в начале мы объявим не массив-список, а ассоциативный массив) и опять же мы увидим на экране все значения элементов массива.
А вот если мы захотим вывести на экран не только значения элементов, но и их ключи (Вы помните, что у ассоциативных массивов индексы представляют собой строковое значение), то данный цикл нужно будет немного усовершенствовать.
<?php $Mass['One'] = 1; $Mass['Two'] = 2; $Mass['Three'] = 3; foreach($Mass as $key => $value) { echo $key . '=>' . $value . '<br>'; } ?>
И в данном случае мы увидим на экране пару: ключ – значение, между которыми будет стрелка.
Перебор элементов массива. Цикл while()
Еще один цикл, который мы можем использовать для перебора всех элементов массива – это цикл while().
При этом нам помогут еще две функции, которые мы будет использовать совместно с этим циклом. Это функции list() и each().
В случае с массивами-списками мы будем использовать данный цикл — вот так:
<?php $Mass[] = 1; $Mass[] = 2; $Mass[] = 3; while(list(, $value) = each($Mass)) { echo $value . '<br>'; } ?>
Наверное, Вы уже догадались, что на экране мы увидим значения элементов массива.
Здесь функция each() возвращает текущий элемент массива, а после перемещает указатель.
В случае с ассоциативным массивом процедура остается прежней, если нам нужно получить только значения элементов массива. Но если мы хотим получить также и ключ каждого элемента, то код нужно будет слегка дополнить. Вот таким образом:
<?php $Mass['One'] = 1; $Mass['Two'] = 2; $Mass['Three'] = 3; while(list($key, $value) = each($Mass)) { echo $key . '=>' . $value . '<br>'; } ?>
Вот так мы получим и ключи и значения.
Перебор элементов массива без использования циклов
Можно осуществлять перебор элементов массива и без использования циклов. Для этого мы будем использовать специальную функцию array_walk().
Эта функция работает следующим образом: она позволяет последовательно применять ко всем элементам массива отдельно созданную функцию. То есть сначала мы создаем самостоятельную функцию, а потом при помощи array_walk() применяем ее к каждому элементу массива. Причем в самостоятельно созданной функции мы можем прописать любое нужное нам действие над элементом массива.
Давайте создадим функцию, которая будет выводить ключ и значение элемента массива на экран, а потом при помощи array_walk() применим ее к каждому элементу нашего массива.
<?php function f_print($value, $key) { echo $key . '=>' . $value . '<br>'; } $Mass['One'] = 5; $Mass['Two'] = 10; $Mass['Three'] = 15; array_walk($Mass, "f_print"); ?>
В итоге на экране мы увидим следующее.
Вот, пожалуй, и все, что я хотела Вам рассказать о переборе элементов массива.
Для того, чтобы лучше понять, как это все работает, советую каждый пример проделать самостоятельно, а возможно, и попрактиковаться со своими собственными примерами.
В следующей статье мы поговорим о добавлении и удалении элементов массива в разные его места.
Жду Ваших комментариев. Делитесь статьей с друзьями при помощи кнопок социальных сетей и подписывайтесь на обновление блога, чтобы всегда быть в курсе новых публикаций.
С Вами была Анна Котельникова. Успехов и до новых встреч!