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

Оператор 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 соответственно.

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

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