Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

3.4.3. Ссылки на элементы многомерных массивов

Ссылки на элементы многомерных массивов внутри строк несколько отличаются от ссылок на другие типы данных. Возможны два варианта.

Во-первых, можно воспользоваться оператором конкатенации:

print "Brownies are good, but the calories content is ".$desserts["Brownies"]["calories"];

Во-вторых, ссылку на элемент многомерного массива можно заключить в фигурные скобки ({ }):

print "Brownies are good, but the calories content is {$desserts[Brownies][calories]}";

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

3.4.4. Перебор элементов многомерных массивов

Задача перебора всех элементов массива возникает очень часто. При этом внешний цикл, как правило, должен перебирать первый индекс массива, а внутренний – второй индекс.

Если используются целочисленные индексы, то проблем с перебором элементов массива не возникает – для этого используется оператор for c увеличением счётчика цикла на величину необходимого шага.

Для массивов со строковыми индексами этого не сделаешь, так как для них невозможны операции + или ++. Поэтому в данном случае необходимо использовать оператор foreach, который предназначен для перебора массива без использования счётчик цикла.

Соответствующее решение представлено в примере Пример 3 -49. Первоначально в нём, с использованием двух вложенных циклов for одномерных индексных массивов, выступающих в роли входных данных $spisokStud и $spisokPredm, создаётся двумерный ассоциативный массив $ocenki с индексами, соответствующими фамилии студента (внешний индекс) и название предмета (внутренний индекс).

Затем, в каждый элемент массива заносится случайным образом сгенерированная оценка (функция rand()), c использованием двух вложенных операторов foreach.

Оператор foreach работает следующим образом: при каждом выполнении из исходного массива сначала извлекается одномерный массив $odnomernMas, соответствующий значению внешнего индекса (фамилия студента), а затем во внутреннем цикле из него извлекаются в переменную $otmetka значения, соответствующие внутреннему индексу – название предмета.

Пример 3‑49

<?php

echo("<pre>"); //Форматирование вывода массива

$spisokStud = array("Иванов","Петров","Сидоров","Васин");

$chisloStud = count($spisokStud);

$spisokPredm = array("история","алгебра","физика");

$chisloPredm = count($spisokPredm);

//Построим двумерный массив оценок студентов

//Оценки получаются случайным образом от 2 до 5

$min = 2; $max=5;

echo "Число студентов = ",$chisloStud,", число предметов = ",$chisloPredm,"<br>";

//внешний цикл

for ($vheshIndex =0; $vheshIndex<$chisloStud; $vheshIndex++)

{

$i = $spisokStud [$vheshIndex];

//echo $vheshIndex, "<br>";

//echo $i, "<br>";

//внутренний цикл

for ($vnutrIndex =0; $vnutrIndex<$chisloPredm; $vnutrIndex++)

{

$j=$spisokPredm[$vnutrIndex];

// echo $vnutrIndex, "<br>";

// echo $j, "<br>";

$ocenki [$i] [$j] = rand($min, $max);

//echo rand($min, $max),'<br>';

}//конец внутреннего цикла

}//конец внешнего цикла

print_r($ocenki);

//Перебор массива по строковым индексам

foreach ($ocenki as $l => $odnomernMas)

{

foreach ($odnomernMas as $m => $otmetka)

{

echo "\$ocenki[$l][$m] = $otmetka <br>";

}

}

?>