Полный цикл в digital

Многомерные массивы

В предыдущих примерах рассматривались только одномерные массивы, где значения элементов представляли числа, строки. Но в PHP массивы могут также быть многомерными, то есть такими, где элемент массива сам является массивом.

Например, создадим многомерный массив с помощью функции array():

$families = array(array("Tom", "Alice"), array("Bob", "Kate"));

Сокращенное определение:

$families = [["Tom", "Alice"], ["Bob", "Kate"]];

Выше определенный многомерный массив $families является двухмерным (частный случай многомерного массива), который можно представить в виде таблицы:

Tom Alice
Bob Kate

Для элементов данного массива не установлены явным образом ключи, поэтому каждый ключ элемента представляет числовой индекс, которые по умолчанию начинаются с нуля. Поэтому чтобы обратиться к первому элементу массива, надо использовать индекс 0 - $families[0]:

$families = [["Tom", "Alice"], ["Bob", "Kate"]];
print_r($families[0]); // Array ( [0] => Tom [1] => Alice )

Но поскольку элементами массива $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

То есть выражение $families[0] представляет обращение к первому элементу массива $families - к вложенному массиву ["Tom", "Alice"], а выражение $families[0][0] представляет обращение к первому элементу вложенного массива, то есть, в данном случае к элементу "Tom".

Перебор многомерного массива:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<table>
<?
$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>

Для перебора применяется цикл foreach. Цикл проходит по всем элементам массива $families, передавая каждый элемент в переменную $family:

foreach ($families as $family)

Однако каждый элемент массива $families, который передается в переменную $family, сам является массивом. И чтобы получить элементы из вложенного массива, применяется вложенный цикл:

foreach ($family as $user)

В итоге при переборе циклом сформируется таблица:

Tom Alice
Bob Kate
Sam Mary

Также можно определять многомерные ассоциативные массивы:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?
$phones = array(
"apple"=> array("iPhone 12", "iPhone X", "iPhone 12 Pro") , 
"samsumg"=>array("Samsung Galaxy S20", "Samsung Galaxy S20 Ultra"),
"nokia" => array("Nokia 8.3", "Nokia 3.4"));
foreach ($phones as $brand => $items)
{
echo "<h3>$brand</h3>";
echo "<ul>";
foreach ($items as $key => $value)
{
echo "<li>$value</li>";
}
echo "</ul>";
}
?>
</body>
</html>

И при выводе мы получим 3 списка:

apple
iPhone 12
iPhone X
iPhone 12 Pro
samsumg
Samsung Galaxy S20
Samsung Galaxy S20 Ultra
nokia
Nokia 8.3
Nokia 3.4

Чтобы обратиться к элементу данного, также надо указать ключи в квадратных скобках. Например, обратимся к первому элементу в первом массиве. Так как ключ первого массива - "apple", а ключ первого элемента в первом массиве - число 0 (так как мы явным образом не указали ключи):

echo $phones["apple"][0];

Подобным образом можно получить второй элемент третьего массива:

echo $phones["nokia"][1];

Допустим, вложенные массивы также представляют ассоциативные массивы:

<?
$gadgets = array(
"phones" => array("apple" => "iPhone 12", 
"samsumg" => "Samsung S20",
"nokia" => "Nokia 8.3"),
"tablets" => array("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>";
}

Получим следующий результат:

phones
apple : iPhone 12
samsumg : Samsung S20
nokia : Nokia 8.3
tablets
lenovo : Lenovo Yoga Smart Tab
samsung : Samsung Galaxy Tab S5
apple : Apple iPad Pro

Получение и изменение элемента в этом массиве:

// присвоим одному из элементов другое значение
$gadgets["phones"]["nokia"] = "Nokia 9";
// выведем это значение
echo $gadgets["phones"]["nokia"];

Выше для инициализации массива применялась функция array(), но также можно использовать и сокращенный вариант с квадратными скобками:

$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"]
];
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг