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. Для соседних задач пригодятся эти разборы:
- foreach в PHP: как перебрать массив и не запутаться в ключах
- Ассоциативный массив в PHP: ключи, значения и обход
- Composer в PHP: установка пакетов без ручного копирования
- Joomla: как убрать index.php из адреса сайта