Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_18_php-2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
92.16 Кб
Скачать

Многомерные массивы

Рассмотрим случай двумерного массива. Концептуально двумерный массив — это одномерный массив одномерных массивов. На этом построены и методы конструирования двумерных массивов.

а) Использование функций-конструкторов.

$usefulSites=array(

array("http://www.yandex.com","http://www.google.com",

"http://www.altavista.com"),

array("http://www.php.com","http://www.rusdoc.ru")

);

или (после определения массивов $searchEngines и $phpDocs)

$searchEngines=array("http://www.yandex.com",

"http://www.google.com",

"http://www.altavista.com");

$phpDocs= array("http://www.php.com",

"http://www.rusdoc.ru");

можно поступить проще

$usefulSites=array($searchEngines, $phpDocs);

Для обращения к двумерным массивам используется синтаксис, принятый в Си.

ЗАДАНИЕ 3 (Работа с многомерными массивами)

1. Используя циклы foreach вывести значения элементов двумерного массива $usefulSites построчно.

Итератор each

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

При каждом обращении функция each извлекает из массива информацию о текущем элементе и автоматически сдвигает внутренний указатель на следующий элемент. Когда внутренний указатель достигает конца массива, то each возвращает false.

Итератор each возвращает массив, который состоит из четырех значений. В нем двумя способами индексируются пары ключ/значение текущего элемента массива. В одном случае индексы числовые (для ключа — 0, для значения — 1), а во втором используются индексы 'key' и 'value'.

Для непосредственной работы с внутренним указателем массива предлагается пять функций: current, prev, next, end, reset (см. справочную информацию).

ЗАДАНИЕ 4 (Итерация по массиву)

Используя цикл

while($x=each($arr7)){…}

вывести информацию об элементах массива $arr7, получаемую в переменной $x. Для вывода использовать функцию print_r , а информацию о каждом элементе выводить в отдельной строке.

Очевидно, что для практических целей было бы удобно получать ключ и значение элемента не в виде массива, а в отдельных переменных. Задачу упрощает функция list, которая часто применяется в комбинации с each.

Конструкция list

list — это специальная конструкция языка, похожая на вызов функции. Она имеет список аргументов произвольной длины, состоящий из имен переменных.

Однако синтаксис использования list необычен: конструкция помещается в левую часть оператора '=' и ей "присваивается" массив. Этот массив должен иметь элементы с числовыми индексами.

Порядковый номер аргумента в списке list (при отсчете от нуля) играет важную роль, так как он определяет числовой индекс элемента массива, из которого в переменную будет скопировано значение.

Т.е. первому своему аргументу конструкция присваивает значение первого элемента массива, второму — второго и т.д., пока не исчерпается список аргументов. Позиции в списке можно пропускать, добавляя лишнюю запятую.

Пример

$a=array(0=>1,2=>2);

list($x,,$y)=$a;

print $y; //2

Если одним элемент разбираемого массива сам является массивов, то можно для разбора элемента можно использовать вложенную конструкцию list.

Если список аргументов list длиннее, чем массив, то возникает ошибка Undefined offset:...

Работа конструкции list не связана с положением внутреннего указателя массива.

При повторном применение list к массиву, разбор вновь будет производится с самого начала массива (а не с той позиции, где остановились в предыдущий раз).

Так как итератор each возвращает информацию, в том числе, и в элементах с числовыми индексами, то list часто применяется вместе с итератором, чтобы сразу скопировать ключ и значение элемента в простые переменные.

ЗАДАНИЕ 5 (Использование конструкции list)

1. В условиях предыдущего задания, используя вместо переменной $x конструкцию list($key,$value), вывести в цикле на экран пары "ключ/значения" в формате

ключ => значение

Замечание

Если операторы задания 5 добавляются к программе задания 4, то перед выполнением нового вывода необходимо вернуть внутренний указатель массива в его начало, чтобы итерирование началось с начала массива.

2. Применить технику из предыдущего примера для анализа значений суперглобального массива $_SERVER.

Справочная информация

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]