П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 178210 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 75669 раз(а).

Учебник HTML.
Просмотров 74130 раз(а).

Руководство по PHP5.
Просмотров 45068 раз(а).

Хостинг через призму DNS.
Просмотров 52016 раз(а).

Подборка текстов стандартных документов.
Просмотров 45158 раз(а).

Учебник PHP - Самоучитель
Просмотров 51394 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 51849 раз(а).

Внешние атаки...
Просмотров 41970 раз(а).

Учебник PHP.
Просмотров 37327 раз(а).

SSI в примерах.
Просмотров 27872 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





ГЛАВА 5. Массивы

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

В РНР существует несколько стандартных функций, предназначенных для перебора элементов массива. В совокупности эти функции обеспечивают гибкие и удобные средства для быстрой обработки и вывода содержимого массивов. Вероятно, вы будете часто использовать эти функции, поскольку они лежат в основе практически всех алгоритмов работы с массивами.

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 <br>"
endwhile;

Ниже приведен более интересный пример использования each() в сочетании с другими функциями, описанными в этой главе. Листинг 5.1 показывает, как при помощи этих функций вывести отформатированную таблицу стран и языков.

Листинг 5.1. Построение таблицы HTML по содержимому массива

// Объявить ассоциативный массив стран и языков
$languages = array("Country" => "Language",
                   "Spain" => "Spanish",
                   "USA" => "English",
                   "France" => "French",
                   "Russia" => "Russian");

// Начать новую таблицу
print "<table border=l>";

// Переместить указатель к позиции первого элемента
reset($languages);

// Прочитать первый ключ и элемент
$hdl = key($languages);
$hd2 = $languages[$hd1];

// Вывести первый ключ и элемент в виде заголовков таблицы
print "<tr><th>$hd1</th><th>$hd2</th></tr>";

next($languages);

// Выводить строки таблицы с ключами и элементами массива
while(list($ctry,$lang) = each($languages)) :
  print "<tr><td>Sctry</td><td>$lang</td></tr>";
endwhile;

// Завершить таблицу print "</table>";
?>

В результате выполнения этого кода будет построена следующая таблица 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().

Назад | Содержание раздела | Общее Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru