- •Лабораторная работа
- •Создание массивов с помощью функции-конструктора
- •Задание 1 (Простейший анализ массивов)
- •Оператор foreach
- •Задание 2 (Использование оператора foreach)
- •Динамическое формирование массивов
- •Многомерные массивы
- •Итератор each
- •Конструкция list
- •1. Общие сведения о применении массивов в рнр
- •Количество элементов в массиве можно вычислить с помощью функции
- •2. Операторы для вывода информации о структуре и значениях объектов данных
- •3. Управлением внутренним указателем
- •Вопросы для самоконтроля
Оператор foreach
Для скалярных массивов задача перебора всех элементов массива решается с помощью последовательного назначения индексов оператором for. Однако для ассоциативных массивов, где индексы или строки, или числа, но не подряд, этот оператор неприменим.
В РНР для работы с ассоциативными (т.е. с любыми) массивами предлагается специальный итератор foreach, который перебирает все элементы любого массива. В общем виде он имеет синтаксис:
foreach($arr as [$key =>] $val) {
… }
(в квадратные скобки, как обычно, взят необязательный элемент конструкции).
Здесь
$arr — имя массива,
$val — переменная, через которую при итерации будут возвращаться поочередно значения текущих элементов, а через переменную
$key — ключи текущих элементов.
Оператор удобно применять даже к обычным скалярным массивам. Например, массив может быть индексирован числами, но точное число элементов неизвестно. Чтобы обработать массив обычным образом с помощью for, необходимо сначала вычислить количество элементов в массиве (функции count или sizeof), а затем выполнить цикл for. Оператор foreach позволяет выполнить это "в одно действие".
Задание 2 (Использование оператора foreach)
1. С помощью оператора foreach в полной форме
foreach($arr as $key=>$val)
вывести в виде таблицы с двумя колонками "ключ/значение" элементы массивов $arr5 и $arr6, и сравнить результаты с определением массивов.
2. Использовать для одного из массивов сокращенную форму
foreach($arr as $x)
и выяснить, что возвращается через переменную $x в этом случае.
3. Создать массив из пяти элементов с обычными числовыми индексами (от нуля и без пропусков). Однако порядок добавления элементов в массив произвольный. Например,
$arr[3]="Четвертый";
$arr[0]="Первый";
. . .
Вывести значения этого массива двумя способами:
а) с помощью оператора for (в сочетании с count() или sizeof()),
б) с помощью оператора foreach.
Есть ли различие в работе операторов и какое?
Динамическое формирование массивов
Когда данные, которые должны быть сохранены в массиве и становятся известными только в процессе выполнения скрипта, то массив нужно конструировать динамически: создается неинициализированный массива и затем его дополняют элементами по мере их вычисления. Однако в РНР это делается проще, так как массив можно явно не создавать, а просто присваивать значения элементам. Пример:
$arr7["yandex"]="http://www.yandex.com";
$arr7["google"]="http://www.google.com";
$arr7["altavista"]="http://www.altavista.com";
Как только РНР встречает попытку добавить элемент к несуществующему массиву, интерпретатор автоматически вызовет конструктор массивов. Поэтому, в принципе, часто программист может не беспокоиться о том, существует ли уже объект массива. В приведенном примере массив $arr7 конструируется по умолчанию при выполнении первой строки скрипта.
Если массив индексируется традиционным способом (последовательными значениями чисел), то процедура еще более упрощается, так как можно вообще не заботиться об индексах: интерпретатор автоматически назначает элементу очередное значение ключа.
$arr8[]="http://www.yandex.com";
$arr8[]="http://www.google.com";
$arr8[]="http://www.altavista.com";
Замечание.
Чтобы "назначить какому-то элементу числовое значение ключа", то интерпретатор "наращивает" значения ключей, начиная с указанного. Т.е., если бы в первой строке предыдущего примера было бы записано
$arr8[2]="http://www.yandex.com";
то второй и третий элементы получили бы значения ключей 3 и 4 соответственно.
Если ранее значение было присвоено элементу со строковым ключом, то, при отсутствии значений индексов, интерпретатор будет добавлять элементы, начиная с нулевого ключа.
