PHP скрипты

MySQL

Apache

phpMyADmin

8.5: Функция count(), Конструкции foreach()

Главная Страница » Книги по PHP » Самоучитель PHP 5 для чайников с примерами » Функция count(), Конструкции foreach()

Функция print_r() позволяет посмотреть на весь массив целиком, но не может выделить отдельные его части. Представьте себе задачу, когда требуется вывести из массива элементы, удовлетворяющие определенному условию. В этом случае функция print_r() не сможет нам помочь. Для решения подобных задач применяют операторы цикла. Но и здесь нас ожидают подводные камни. Сначала разберем самый простой случай, когда массив в качестве ключей имеет последовательный ряд чисел. Воспользуемся оператором цикла for, так как его запись является очень компактной и практичной. Единственное, что нам надо выяснить, - это количество элементов в массиве. На практике очень часто для решения данной проблемы применяют функцию count(). В качестве входного параметра для нее является массив, а возвращает она количество элементов в нем (листинг 8.3).

Листинг 8.3. Обход массива.

‹html›
‹head›
‹title›Обход массива‹/title›
‹/head›
‹body›
‹?php
// инициализация массива
$closets = array (0 => "Майка", 1 => "Кроссовки", 2 => "Шорты");
$len_mass = count ($closets); // вычисление количества элементов
for ($i = 0; $i < $len_mass; $i++)
{
  echo $closets[$i] . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

Итак, предположим, что ключ первого элемента в нашем массиве будет 0. Таким образом, мы проходим по всем элементам массива и выводим их. В этот цикл уже можно добавить определенное условие, предъявляемое к элементам массива.

У вас может возникнуть вопрос о присутствии переменной $len_mass в программе, так как функцию count() можно компактно уместить во второе выражение цикла for. Сразу хочется сказать, что делать этого не следует, потому что при этом возникают два негативных момента. Во-первых, функция count () будет выполняться при каждой итерации, что увеличивает время обработки, а во-вторых, количество элементов массива может поменяться в теле цикла.

К сожалению (а может и к счастью), рассматриваемый массив является лишь частным случаем. На практике обычно встречаются массивы с непоследовательной индексацией. Да и применение цикла for сегодня является неактуальным, так как есть специальная конструкция fоreach, которая появилась только в четвертой версии РНР. В общем случае она выглядит так, как показано в листинге 8.4.

Листинг 8.4. Конструкция foreach.

foreach ($massiv as $key => $value)
{
// действия
}

В этой конструкции мы видим три переменные, среди которых $massiv - это просматриваемый массив. Переменные $кеу и $value (названия этих переменных вы выбираете сами) содержат соответственно ключ и значение. Итак, поясним ход работы этого оператора цикла на примере листинга 8.5.

Листинг 8.5. Обход массива с помощью конструкции foreach.

‹html›
‹head›
‹title›вывод Обход массива с помощью конструкции forach‹/title›
‹/head›
‹body›
‹?php
$сlosets = array ("Петров"=>"Майка", "Иванов"=>"Кроссовки", "Сидоров"=>"Шорты");
foreach ($closets as $key => $value)
{
  echo $key . " " . $value . "‹br›"; // вывод элемента
}
?›
‹/body›
‹/html›

Итак, в первой строчке мы создаем массив из трех элементов. Заметьте, что индексация производится с помощью строк. Далее следует конструкция, которая начинается со слова foreach. Затем в круглых скобках помещается рассматриваемый массив, после которого записывается специальное слово as. После него следует пара ключ-значение, разделяемая оператором =>. Итак, на первой итерации переменной $кеу присваивается ключ первого элемента, а переменной $value - его значение. При следующей итерации в переменные $кеу и $value запишутся соответственно ключ и значение следующего элемента. И так далее, пока массив не будет пройден полностью.

Естественно, у вас может возникнуть вопрос о способе реализации этого цикла, так как механизм перемещения по массиву остается скрытым от программиста. Дело в том, что любой массив помимо ключей и значений имеет внутренний указатель (pointer) или курсор, с помощью которого можно узнать, какой элемент мы сейчас рассматриваем. Этим указателем, естественно, можно управлять, то есть переносить его от одного элемента к другому. Для работы с указателем применяются функции list(), each(), count() и др. Приведем краткий обзор этих функций.

Поделиться с друзьями