Многомерные массивы
До сих пор рассматривались только одномерные массивы. Но в РНР имеется возможность работы и с многомерными массивами. Пусть для хранения экзаменационных оценок используется одномерный массив $test_scores:
$test_scores["Иванов"] = 95; $test_scores["Петров"] = 87;
Но что если надо хранить оценки по нескольким предметам? Для этого удобно использовать двухмерный массив, например:
<?php $test_scores["Иванов"][1] = 95; $test_scores["Иванов"][2] = 85; $test_scores["Петров"][1] = 87; $test_scores["Петров"][2] = 93; print_r($test_scores); ?>
Элемент массива $test_scores["Иванов"][1] содержит оценку Иванова по первому предмету, $test_scores["Иванов"][2] —по второму предмету и т.д. В результате выполнения предыдущего примера будет выведен созданный многомерный массив:
Array ( [Иванов] => Array ( [1] => 95 [2] => 85 ) [Петров] => Array ( [1] => 87 [2] => 93 ) )
Доступ к элементу многомерного массива осуществляется путем указания всех его индексов, например:
echo "Оценка Иванова по первому предмету : ", $test_scores["Иванов"][1], "\n";
Если требуется заменить элемент массива его значением в строковой константе, ограниченной двойными кавычками, подобно тому, как это делается с обычной переменной, следует заключить элемент массива в фигурные скобки и использовать для строковых индексов одиночные кавычки:
echo "Оценка Иванова по первому предмету: ($test_scores['Иванов'][1])\n";
Для создания многомерных массивов можно использовать и сокращенную форму, но следует иметь в виду, что в данном случае нумерация второго индекса начинается с 0:
<?php $test_score["Иванов"][] = 95; $test_scores["Иванов"][] = 85; $test_scores["Петров"][] = 87; $test_scores["Петров"][] = 93; print_r($test_scores); ?>
В РНР многомерные массивы можно рассматривать как массивы массивов. Например, двухмерный массив можно рассматривать как одномерный массив, элементами которого в свою очередь также являются одномерные массивы. Пример такого описания приведен ниже:
<?php $test_scores = array( "Иванов" => array(95, 85), "Петров" => array(87, 93)); print_r($test_scores); ?>
В результате будет создан следующий массив:
Array ( [Иванов] => Array ( [0] => 95 [1] => 85 ) [Петров] => Array ( [0] => 87 [1] => 93 ) )
Если требуется начать нумерацию второго индекса с 1, используется уже известный синтаксис:
<?php $test_scores = array( "Иванов" => array (1 => 95, 85), "Петров" => array (1 => 87, 93) ); print_r ($test_scores); ?>
В результате будет создан массив следующего вида:
Array( [Иванов] => Array ( [1] => 95 [2] => 85 ) [Петров] => Array ( [1] => 87 [2] => 93 ) )
Автор: Стивен Хольцнер. Переводчик: С. Банников