Определение
В предыдущих примерах рассматривались только одномерные массивы, где значения элементов представляли числа, строки. Но в PHP массивы могут также быть многомерными, то есть такими, где элемент массива сам является массивом.
Например, создадим многомерный массив с помощью функции array()
:
$families = [["Tom", "Alice"], ["Bob", "Kate"]];
Выше определенный многомерный массив $families
является двухмерным (частный случай многомерного массива), который можно представить в виде таблицы:
Tom | Alice |
Bob | Kate |
Для элементов данного массива не установлены явным образом ключи, поэтому каждый ключ элемента представляет числовой индекс, которые по умолчанию начинаются с нуля. Поэтому чтобы обратиться к первому элементу массива, надо использовать индекс 0 – $families[0]
Но поскольку элементами массива $families являются вложенные массивы, то чтобы обратиться к элементам внутри этих вложенных массивов, нам необходимо использовать второй индекс – $families[0][0]
:
$families = [["Tom", "Alice"], ["Bob", "Kate"]];
echo $families[0][0] . "<br />"; //Tom
echo $families[0][1] . "<br />"; //Alice
echo $families[1][0] . "<br />"; //Bob
echo $families[1][1]; //Kate
Перебор многомерного массива
Для перебора применяется цикл foreach. Цикл проходит по всем элементам массива $families, передавая каждый элемент в переменную $family
. Однако каждый элемент массива $families, который передается в переменную $family, сам является массивом. И чтобы получить элементы из вложенного массива, применяется вложенный цикл
<!DOCTYPE html>
<html>
<head>
<title>Многомерные массивы php</title>
<meta charset="utf-8" />
</head>
<body>
<table>
<?php
$families = [["Tom", "Alice"], ["Bob", "Kate"], ["Sam", "Mary"]];
foreach ($families as $family)
{
echo "<tr>";
foreach ($family as $user)
{
echo "<td>$user</td>";
}
echo "</tr>";
}
?>
</table>
</body>
</html>
Также можно определять многомерные ассоциативные массивы.
<?php
$gadgets = [
"phones" => ["apple" => "iPhone 12",
"samsumg" => "Samsung S20",
"nokia" => "Nokia 8.2"],
"tablets" => ["lenovo" => "Lenovo Yoga Smart Tab",
"samsung" => "Samsung Galaxy Tab S5",
"apple" => "Apple iPad Pro"]
];
foreach ($gadgets as $gadget => $items)
{
echo "<h3>$gadget</h3>";
echo "<ul>";
foreach ($items as $key => $value)
{
echo "<li>$key : $value</li>";
}
echo "</ul>";
}
?>