Menu

Многомерные массивы PHP: вложенные массивы и циклы

Многомерный массив в PHP это массив, элементы которого тоже массивы; читается он по одной паре скобок на уровень: $grid[1][2] или $users[0]['name']. Как создавать вложенные массивы, читать и менять глубокие значения, обходить вложенным foreach, строить HTML-таблицу, извлекать столбец и сортировать строки.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Многомерный массив это массив, элементы которого тоже массивы. Читается он по одной паре скобок на уровень: $grid[1][2] это строка 1, столбец 2, а $users[0]['name'] это имя в первой записи.

Вторая форма, список записей с именованными полями, встречается чаще всего: именно её обычно дают запрос к базе данных, декодированный JSON-ответ или разобранный CSV-файл. Каждая запись это ассоциативный массив.

Создание вложенных массивов

Вложенность может быть любой глубины, а уровни могут сочетать числовые и строковые ключи. Частый пример это массив настроек: именованные разделы, в каждом из которых настройки или списки.

Добавление строк и вложенных значений

$rows[] = [...] добавляет целую строку. $arr['key'][] = $value добавляет во вложенный список, а внутренний массив PHP создаёт при первом обращении, так что группировка значений не требует подготовки.

Обход многомерного массива

Используйте по одному foreach на уровень. Для списка записей обычно хватает одного цикла, потому что поля читаются по имени. Для сетки внутренний цикл проходит ячейки каждой строки.

HTML-таблица из массива

Массив строк напрямую ложится на HTML-таблицу: ключи первой строки становятся заголовком, а каждая строка становится <tr>. Запустите, и вкладка Page покажет готовую таблицу; измените значение или добавьте строку и запустите снова.

Форма foreach (...): ... endforeach; это тот же цикл, записанный для шаблонов, чтобы HTML оставался читаемым.

Один столбец из всех строк

array_column() извлекает одно поле из каждой строки в плоский список. Передайте третий аргумент, чтобы сделать ключами результата другое поле, и список записей превратится в таблицу поиска.

Сортировка строк по полю

usort() сортирует строки функцией сравнения. Оператор spaceship <=> возвращает -1, 0 или 1, ровно то, чего ждёт usort(). Поменяйте $a и $b местами, чтобы сортировать по убыванию.

count($players, COUNT_RECURSIVE) считает 3 строки и 6 полей внутри них, поэтому выводит 9.

Частая ошибка: чтение глубокого ключа, которого может не быть

Чтение $config['cache']['ttl'] при отсутствии ключа cache печатает Warning: Undefined array key "cache", а следом Warning: Trying to access array offset on null для следующего уровня. Оператор ?? проверяет всю цепочку сразу и никогда не предупреждает, поэтому это безопасный способ читать необязательные вложенные значения.

Часто задаваемые вопросы

Как получить значение из многомерного массива в PHP?

Добавляйте по паре скобок на каждый уровень: $matrix[1][0] это строка 1, столбец 0, а $users[0]['email'] это email первого пользователя. Каждая пара скобок читает из массива, который вернула предыдущая.

Как обойти многомерный массив в PHP?

Вкладывайте по одному foreach на уровень: foreach ($rows as $row) { foreach ($row as $key => $value) { ... } }. Для массива записей обычно хватает одного цикла, а поля читаются по имени: $row['name'].

Как добавить элемент в многомерный массив?

Добавьте целую строку через $rows[] = ['name' => 'Linus', 'age' => 54]; или добавьте внутрь вложенного массива через $groups['admins'][] = 'Grace';. Если ключа ещё нет, PHP создаст внутренний массив сам.

Как создать двумерный массив из нулей в PHP?

Вложите два вызова array_fill(): $grid = array_fill(0, 3, array_fill(0, 4, 0)); даёт 3 строки по 4 нуля. Каждая строка это отдельная копия, поэтому $grid[0][0] = 5; меняет только первую строку.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ