Применение многомерных массивов в PHP | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Разработчик на Spring Framework
-5%
Flutter Mobile Developer NoSQL iOS Developer. Basic
-10%
C++ Developer. Basic C++ Developer. Professional Android Developer. Professional Microservice Architecture Unity Game Developer. Professional Базы данных Node.js Developer React.js Developer Специализация Java-разработчик
-25%
Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect Специализация Administrator Linux
-25%
Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Применение многомерных массивов в PHP

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

Двумерные массивы в PHP

Двумерный массив в PHP представляет собой массив, хранящий в качестве значений другие массивы. Создаётся он посредством конструктора array():

$flowers = array( array("фиалки", 100 , 15),
                  array("астры", 60 , 25),
                  array("каллы", 180 , 7) 
                ); 

Итак, в нашем случае массив $flowers включает в себя 3 массива. Тут следует вспомнить, что для доступа к элементам одномерного массива в PHP следует указывать ключ и имя массива. В случае с двумерными массивами это правило тоже действует, правда, есть исключение: каждый элемент имеет 2 ключа: один для выбора строки, другой для выбора столбца.

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

<?php
$flowers = array( array("фиалки", 100 , 15),
                  array("астры", 60 , 25),
                  array("каллы", 180 , 7) 
                ); 

echo "<h1>Выполняем доступ к элементам вручную</h1>";

echo $flowers[0][0]." стоимость ".$flowers[0][1]." количество ".$flowers[0][2]."<br>";
echo $flowers[1][0]." стоимость ".$flowers[1][1]." количество ".$flowers[1][2]."<br>";
echo $flowers[2][0]." стоимость ".$flowers[2][1]." количество ".$flowers[2][2]."<br>";

echo "<h1>Применяем циклы для вывода элементов</h1>";

echo "<ol>";
for ($row = 0; $row < 3; $row++) {
    echo "<li><b>Номер строки $row</b>";
    echo "<ul>";

    for ($col = 0; $col < 3; $col++) {
        echo "<li>".$flowers[$row][$col]."</li>";
    }

    echo "</ul>";
    echo "</li>";
}
echo "</ol>";
?>

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

    $flowers = array( array( "Название" => "фиалки", 
                         "Стоимость" => 100,
                         "Количество" => 15 
                       ),
                  array( "Название" => "астры", 
                         "Стоимость" => 60,
                         "Количество" => 25,
                       ),
                  array( "Название" => "каллы", 
                         "Стоимость" => 180,
                         "Количество" => 7 
                       )
                );

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

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

    <?php
$flowers = array( array( "Название" => "фиалки", 
                         "Стоимость" => 100,
                         "Количество" => 15 
                       ),
                  array( "Название" => "астры", 
                         "Стоимость" => 60,
                         "Количество" => 25,
                       ),
                  array( "Название" => "каллы", 
                         "Стоимость" => 180,
                         "Количество" => 7 
                       )
                );

echo "<h1>Выполняем доступ к элементам ассоциативного массива вручную</h1>";

for ($row = 0; $row < 3; $row++) {
    echo $flowers[$row]["Название"]." стоимость ".$flowers[$row]["Стоимость"]
      ." количество ".$flowers[$row]["Количество"];
    echo "<br>";
}

echo "<h1>Используем для доступа к элементам цикл foreach</h1>";

echo "<ol>";
for ($row = 0; $row < 3; $row++) {
    echo "<li><b>Номер строки $row</b>";
    echo "<ul>";

    foreach($flowers[$row] as $key => $value) {
        echo "<li>".$value."</li>";
    }

    echo "</ul>";
    echo "</li>";
}
echo "</ol>";
?>

Кстати, совсем необязательно применять во время создания двумерного массива конструктор array() — подойдут и квадратные скобки:

    $flowers = [ [ "Название" => "фиалки", 
               "Стоимость" => 100,
               "Количество" => 15 
             ],
             [ "Название" => "астры", 
               "Стоимость" => 60,
               "Количество" => 25,
             ],
             [ "Название" => "каллы", 
               "Стоимость" => 180,
               "Количество" => 7 
             ]
           ];

Трёхмерные массивы в PHP

Но никто не говорит, что надо ограничиваться лишь 2-мя измерениями: эти массивы тоже могут, в свою очередь, включать в себя новые.

Многомерный (3-мерный) массив характеризуется шириной, высотой и глубиной. Говоря о двумерном массиве, мы представляем таблицу, говоря о многомерном, можно представить слои в этой таблице. И каждый элемент многомерного массива станет ссылаться на слой, столбец и строку.

Давайте изменим «цветочный» массив, переделав его в 3-мерный, то есть превратив в массив массивов:

    $flowers = [ [ ["фиалки", 100 , 15], 
               ["астры", 60 , 25],
               ["каллы", 180 , 7] 
             ],
             [ ["фиалки", 100 , 15], 
               ["астры", 60 , 25],
               ["каллы", 180 , 7],
             ],
             [ ["фиалки", 100 , 15], 
               ["астры", 60 , 25],
               ["каллы", 180 , 7] 
             ]
           ];

Так как данный PHP-массив включает в себя лишь числовые индексы, мы можем применять вложенные циклы для его отображения:

    <?php

    $flowers = [ [ ["фиалки", 100 , 15], 
               ["астры", 60 , 25],
               ["каллы", 180 , 7] 
             ],
             [ ["фиалки", 100 , 15], 
               ["астры", 60 , 25],
               ["каллы", 180 , 7],
             ],
             [ ["фиалки", 100 , 15], 
               ["астры", 60 , 25],
               ["каллы", 180 , 7] 
             ]
           ];            
echo "<ul>";
for ( $layer = 0; $layer < 3; $layer++ )
{
    echo "<li>Номер слоя $layer";
    echo "<ul>";

    for ( $row = 0; $row < 3; $row++ )
    {
       echo "<li>Номер строки $row";
       echo "<ul>";

        for ( $col = 0; $col < 3; $col++ )
        {
            echo "<li>".$flowers[$layer][$row][$col]."</li>";
        }
        echo "</ul>";
        echo "</li>";
    }
    echo "</ul>";
    echo "</li>";
}  
echo "</ul>";
?>

По материалам статьи «PHP: Многомерные массивы».

Пожалуй, этого достаточно, чтобы получить представление о двумерных и многомерных массивах в PHP. Приобрести более глубокие навыки PHP-программирования вы всегда сможете на наших курсах:

PHP_970x90-20219-10b307.jpg

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться