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

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

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

Двумерный массив - массив, который в качестве значений хранит в себе другие массивы. Рассмотрим создание двумерного массива с помощью конструктора array():

$flowers = array( array("розы", 100 , 15),
                  array("тюльпаны", 60 , 25),
                  array("орхидеи", 180 , 7) 
                ); 

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

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

<?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 
             ]
           ];

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

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

Трёхмерный массив характеризует ширину, высоту и глубину. Если представлять двумерный массив в виде таблицы, то трёхмерный добавляет к этой таблице слои. Каждый элемент такого массива будет ссылаться на слой, строку и столбец.

Если немного модифицировать наш массив с цветами, то можно переделать его в трёхмерный. В коде, представленном ниже видно, что трёхмерный массив - массив, содержащий массив массивов:

$flowers = [ [ ["розы", 100 , 15], 
               ["тюльпаны", 60 , 25],
               ["орхидеи", 180 , 7] 
             ],
             [ ["розы", 100 , 15], 
               ["тюльпаны", 60 , 25],
               ["орхидеи", 180 , 7],
             ],
             [ ["розы", 100 , 15], 
               ["тюльпаны", 60 , 25],
               ["орхидеи", 180 , 7] 
             ]
           ];

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

<?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>";
?>
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | Обратная связь