PHP

Многомерный массив в PHP: как обратиться к элементу

Короткий ответ: многомерный массив в PHP — это массив, внутри которого лежат другие массивы. Чтобы обратиться к вложенному элементу, используйте несколько квадратных скобок: $users[0]['name']

Такие массивы появляются в каталогах товаров, списках пользователей, настройках, результатах API, меню сайта и данных из базы

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

<?php

$users = [
    ['name' => 'Динар', 'role' => 'admin'],
    ['name' => 'Анна', 'role' => 'editor'],
];

echo $users[0]['name'];

Результат

Динар

$users[0] берет первый вложенный массив, а ['name'] берет значение по ключу name

Массив каталога

<?php

$catalog = [
    'books' => [
        ['title' => 'PHP с нуля', 'price' => 900],
        ['title' => 'Формы на PHP', 'price' => 700],
    ],
    'courses' => [
        ['title' => 'Практический PHP', 'price' => 3000],
    ],
];

echo $catalog['books'][1]['title'];

Результат

Формы на PHP

Читать такую запись проще справа налево: нужен title у элемента 1 внутри раздела books

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

<?php

foreach ($users as $user) {
    echo $user['name'] . ' — ' . $user['role'] . '<br>';
}

Каждый $user — отдельный вложенный массив. Внутри цикла можно обращаться к его ключам

Перебор каталога по разделам

<?php

foreach ($catalog as $category => $items) {
    echo '<h2>' . htmlspecialchars($category, ENT_QUOTES, 'UTF-8') . '</h2>';

    foreach ($items as $item) {
        echo '<p>';
        echo htmlspecialchars($item['title'], ENT_QUOTES, 'UTF-8');
        echo ' — ' . $item['price'] . ' руб.';
        echo '</p>';
    }
}

Здесь первый foreach проходит по категориям, а второй — по товарам внутри каждой категории

Проверка ключей

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

<?php

$user = ['name' => 'Динар'];

echo $user['role'] ?? 'guest';

Оператор ?? вернет значение справа, если ключа нет или значение равно null

Для более явной проверки ключа можно использовать array_key_exists()

<?php

if (array_key_exists('role', $user)) {
    echo $user['role'];
}

Как вывести многомерный массив для отладки

<?php

echo '<pre>';
print_r($catalog);
echo '</pre>';

Так удобно увидеть структуру и понять, к каким ключам обращаться. После отладки такой вывод нужно удалить

Мини-практика

Создайте массив $lessons, где каждый урок содержит title, minutes и level. Выведите HTML-список уроков. Затем добавьте проверку: если level равен beginner, рядом с уроком показать текст для новичков

Частые ошибки

Путают индекс и ключ $users[0] — числовой индекс, $user['name'] — строковый ключ

Обращаются к несуществующему ключу Используйте ??, isset() или array_key_exists()

Не смотрят структуру массива Перед сложным обращением выведите массив через print_r() в <pre>

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

Как проверить себя

Возьмите массив $catalog и добавьте третий раздел, например services. Затем выведите все разделы через вложенный foreach и проверьте, что код не зависит от конкретного названия категории. Если при добавлении нового раздела не пришлось переписывать вывод, значит структура массива выбрана удачно и цикл работает как надо

Что почитать дальше по PHP

Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x