Изучаем PHP программирование

   Search   

Русская версия | English version   

Скрипты :: Секреты профессионалов :: Link :: FAQ   Пишите письма  



 

главная :: основы PHP

Перебор элементов

В РНР существует несколько стандартных функций, предназначенных для перебора элементов массива. В совокупности эти функции обеспечивают гибкие и удобные средства для быстрой обработки и вывода содержимого массивов. Вероятно, вы будете часто использовать эти функции, поскольку они лежат в основе практически всех алгоритмов работы с массивами. reset( ) Функция reset( ) переводит внутренний указатель текущей позиции в массиве к первому элементу. Кроме того, она возвращает значение первого элемента. Синтаксис функции reset( ): mixed reset (array массив) Рассмотрим следующий массив: $fruits = array("apple", "orange", "banana"); Допустим, указатель текущей позиции в этом массиве установлен на элемент "orange". Команда: $a_fruit = reset($fruits); вернет указатель в начало массива, то есть на элемент "apple", и вернет это значение, если результат вызова reset( ) используется в программе. Возможен и упрощенный вариант вызова: reset($fruits); В этом случае указатель переходит к первому элементу массива, а возвращаемое значение не используется. each ( ) Функция each( ) при каждом вызове выполняет две операции: она возвращает пару «ключ/значение», на которую ссылается указатель текущей позиции, и перемещает указатель к следующему элементу. Синтаксис функции each( ): array each (array массив) Для удобства each ( ) возвращает ключ и значение в виде массива из четырех элементов; ключами этого массива являются 0, 1, value и key. Возвращаемый ключ ассоциируется с ключами 0 и key, а возвращаемое значение — с ключами 1 и value. В следующем примере функция each ( ) возвращает элемент, находящийся в текущей позиции: // Объявить массив из пяти элементов $spices = array("parsley", "sage", "rosemary", "thyme", "pepper"); // Установить указатель на первый элемент массива reset($spices); // Создать массив $a_sp1ce. состоящий из четырех элементов $a_spice = each($spices); В результате выполнения приведенного фрагмента массив $a_spice будет содержать следующие пары «ключ/значение»: 0 => 0; 1 => "parsley"; key => 0; value => "parsley". После этого строку "parsley" можно вывести любой из следующих команд: print $a_spice[1]: print $a_spice["value"]; Функция each() обычно используется в сочетании с list( ) в циклических конструкциях для перебора всех или некоторых элементов массива. При каждой итерации each( ) возвращает либо следующую пару «ключ/значение», либо логическую ложь при достижении последнего элемента массива. Вернемся к массиву $spices; чтобы вывести все элементы на экран, можно воспользоваться следующим сценарием: // Сбросить указатель текущей позиции reset($spices); // Перебрать пары "ключ/значение", ограничиваясь выводом значения while (list ($key, $val) = each ($spices) ) : print "$val
" endwhile; Ниже приведен более интересный пример использования each( ) в сочетании с другими функциями, описанными в этой главе. Листинг 5.1 показывает, как при помощи этих функций вывести отформатированную таблицу стран и языков. Листинг 5.1. Построение таблицы HTML по содержимому массива // Объявить ассоциативный массив стран и языков $languages = array ("Country" => "Language", "Spain" => "Spanish", "USA" => "English", "France" => "French", "Russia" => "Russian"); // Начать новую таблицу print ""; // Переместить указатель к позиции первого элемента reset ($languages); // Прочитать первый ключ и элемент $hdl = key ($languages); Shd2 = $languages[$hd1]; // Вывести первый ключ и элемент в виде заголовков таблицы print ""; next($languages); // Выводить строки таблицы с ключами и элементами массива while (list ($ctry,$lang) = each ($languages)) : print ""; endwhile; // Завершить таблицу print "
$hd1$hd2
Sctry$lang
"; ?> В результате выполнения этого кода будет построена следующая таблица HTML. Country Language Spain Spanish USA English France French Russia Russian Этот пример дает представление о самой сильной стороне РНР — возможности объединения динамического кода с HTML для получения наглядного, отформатированного представления прочитанных данных. end( ) Функция end( ) перемещает указатель к позиции последнего элемента массива. Синтаксис функции end( ): end (array массив) next( ) Функция next ( ) смещает указатель на одну позицию вперед, после чего возвращает элемент, находящийся в новой позиции. Если в результате смещения указатель выйдет за пределы массива, next ( ) возвращает ложное значение. Синтаксис функции next ( ): mixed next (array массив) Недостаток функции next ( ) заключается в том, что ложное значение возвращается и для существующих, но пустых элементов массива. Если вы хотите провести обычный перебор, воспользуйтесь функцией each( ). prev( ) Функция prev( ) аналогична next ( ) за одним исключением: указатель смещается на одну позицию к началу массива, после чего возвращается элемент, находящийся в новой позиции. Если в результате смещения указатель окажется перед первым элементом массива, prev( ) вернет ложное значение. Синтаксис функции prev( ): mixed prev (array массив) Недостаток функции prev( ) заключается в том, что ложное значение возвращается и для существующих, но пустых элементов массива. Если вы хотите провести обычный перебор, воспользуйтесь функцией each( ). array_walk( ) Функция array_walk( ) позволяет применить функцию к нескольким (а возможно, всем) элементам массива. Синтаксис функции array_walk( ): int array_walk(array массив, string имя_функции [, mixed данные]) Функция, заданная параметром имя_функции, может использоваться для различных целей — например, для поиска элементов с определенными характеристиками или модификации содержимого массива. В ассоциативных массивах функция имя_функции должна получать минимум два параметра — элемент массива и ключ. Если указан необязательный третий параметр данные, он становится третьим параметром. В следующем примере функция array_walk( ) используется для удаления дубликатов из массива: function delete_dupes($element) { static $last=""; if ($element == $last) unset($element); else . '' $last=$element: } $emails = array("blah@blah.com", "chef@wjgilmore.com", "blah@blah.com"); sort($emails); reset($emails); array_walk($emails,"delete_dupes"); // $emails = array("chef@wjgilmore.com", "blah@blah.com"); array_reverse( ) Функция array_reverse( ) позволяет легко перейти к противоположному порядку элементов, составляющих массив. Синтаксис функции array_reverse( ): array array_reverse(array массив) Рассмотрим пример использования функции array_reverse( ): $us_wireproducers = array ("California", "Oregon", "New York". "Washington"); $us_wine_producers - array_reverse (Sus_wine_producers); // $us_wine_producers = array ("Washington". "New York", "Oregon". "California"); При вызове array_reverse( ) для ассоциативного массива пары «ключ/значение» сохраняются, изменяется только порядок элементов массива. array_flip( ) Функция array_flip( ) меняет местами ключи и значения элементов массива. Синтаксис функции array_flip( ): array array_flip(array массив) В следующем примере функция array_flip( ) меняет местами все ключи и значения элементов: $languages = array("Spain" => "Spanish", "France" => "French", "Italy" => "Italian"); $languages = array_flip($languages); // $languages = array("Spanish" => "Spain", // "French" => "France", // "Italian" => "Italy"); Помните: функция array_flip( ) не изменяет порядок элементов массива. Для этой цели используется функция array_reverse( ).

Designed by Fedin
All right reserved
2003-2004
Hosted by uCoz