Что такое многомерные массивы в PHP: двумерные, трехмерные, как их создать
Оглавление:
Что это такоеЧто такое двумерный
Что такое трёхмерный
Как получить доступ к элементу
Резюме
Массив в PHP (от англ. Array) — это глобальный объект для хранения данных упорядоченным образом. Как устроен: упорядоченный список элементов всегда имеет собственный ключ, он называется индексом, а каждое значение в такой коллекции данных называется элементом. При этом отсчет индекса всегда начинается с нуля. Самые частые примеры упорядоченных коллекций в реальном мире — списки данных, например, список HTML-элементов, список пользователей, список продуктов, список адресов.
Если обычный массив похож на числовую линейку, то двумерный — это как массив массивов. Вот как происходит обращение к элементам такого объекта:
- В стандартном вы можете получить доступ к любому объекту по его номеру в ряду, например, array[21] даст вам 22-й элемент.
- В двумерном к элементам обращаются по строке и столбцу, например, array2d[5][6] даст вам 7-й элемент 6-го элемента.
Аналогичным образом организованы и ещё более многомерные варианты, доступ к которым осуществляется как array[5][3][4][7][...]. Такие называются многомерными, поскольку они существуют более чем в одном измерении.
Простыми словами, массив PHP — это упорядоченный список элементов с указанным индексом (ключом к ним) для быстрого получения доступа к любому элементу.
Как создать многомерный массив
По сути, мы должны создать один главный массив и затем поместить в него остальные массивы.
Синтаксис многомерного массива следующий:
array (
array (elements...),
array (elements...),
...
)
Чтобы создать такой объект вы можете следовать этому шаблону:
array(
array1(),
array2(),
array3(),
...
);
Итак, давайте создадим массив. Пусть это будет список пользователей с именем, телефоном, электронной почтой, городом и областью:
<?php
$people= array(
array(
"name" => «Janna Kovaleva»,
«email» => «abjanna@gmail.com»,
«city» => «Saratov»,
«state» => «Saratovskaya»),
array(
«name» => «Roman Hanin»,
«email» => «dumka@gmail.com»,
«city» => «Lipetsk»,
«state» => «Lipetskaya»),
array(
«name» => «Rodion Pomidor»,
«email» => «gurik@gmail.com»,
«city» => «Moscow»,
«state» => «Moskovskaya»)
);
Для создания этого массива мы использовали пару типа ключ / значение.
- Ключи — это name, email, city и state.
- Значения — имя, электронная почта, город и область каждого пользователя.
Попробуем использовать функцию print_r вместе с тегами pre, чтобы сделать пример более читабельным:
Array
(
[0] => Array
(
[name] => Janna Kovaleva
[email] => abjanna@gmail.com
[city] => Saratov
[state] => Saratovskaya
)
[1] => Array
(
[name] => Roman Hanin
[email] => dumka@gmail.com
[city] => Lipetsk
[state] => Lipetskaya
)
[2] => Array
(
[name] => Rodion Pomidor
[email] => gurik@gmail.com
[city] => Moscow
[state] => Moskovskaya
)
)
Вы также можете создать такой же массив без пар ключ-значение.
<?php
$people= array(
array(
"Janna Kovaleva",
"abjanna@gmail.com",
"Saratov",
"Saratovskaya"),
array(
"Roman Hanin",
"dumka@gmail.com",
"Lipetsk",
"Lipetskaya"),
array(
"Rodion Pomidor",
"gurik@gmail.com",
"Moscow",
"Moskovskaya")
);
?>
Снова используем функцию print_r вместе с тегами pre. Получим следующий вывод:
Array
(
[0] => Array
(
[0] => Janna Kovalev
[1] => abjanna@gmail.com
[2] => Saratov
[3] => Saratovskaya
)
[1] => Array
(
[0] => Roman Hanin
[1] => dumka@gmail.com
[2] => Lipetsk
[3] => Lipetskaya
)
[2] => Array
(
[0] => Rodion Pomidor
[1] => gurik@gmail.com
[2] => Moscow
[3] => Moskovskaya
)
)
Проблема с массивом без пар ключ-значение понятна: его гораздо сложнее хорошо организовать и обращаться к его элементам.
Вернемся к примеру выше: поскольку у нас есть столбцы с числовым представлением, а не текстовыми (name, email, city, state), то это будет сложнее воплотить. Вот почему лучше предусматривать пары ключ-значение изначально. Но каждый программист может предпочесть один способ другому. И оба типа многомерности достигают одного и того же. Но с парами ключ-значение — можно быстро адресовать столбец по имени. Без этих — придется обращаться к столбцам по номерам, а это не всегда удобно.
Что такое двумерный массив + примеры
Если мы немного уйдём от PHP, понять его смысл гораздо проще. Такой объект организован в виде матрицы с определенным количеством строк и столбцов.
Можно рассматривать его как массив внутри каждого отдельного массива:
[[1, 2, 3, 4],
[1, 2, 3, 4]]
В этой абстракции данных каждый их элемент идентифицируется парой значений индекса.
Двумерный тип очень похож на электронную таблицу со строками и столбцами.
Многие языки реализуют 2D-массив как массив одномерных массивов.
Столбцы индексируются буквами A, B, С. Строки — значениями 1, 2, 3, 4
Примеры:
- Значение 10 в нашем примере — индексируется по значению строки (1) и значению столбца (A).
- Значение 19 — по значению строки (2) и значению столбца (B).
Каждое значение в двухмерном массиве имеет уникальную пару значений индекса (строки и столбца).
Но вернемся к PHP. Вот пример двумерного объекта:
<?php
// Создадим двумерный массив
$myarray = array(
// Ключ по умолчанию для каждого
// начинается с 0
array("Arik", "Romka", "Sara"),
array("Denis", "Taras", "Katerina")
);
// Вывести информацию из массива
print_r($myarray);
?>
Давайте резюмируем, что нужно запомнить о 2D-массиве.
- Это структура данных используется для хранения коллекции элементов, где каждый элемент сам является массивом. Например: каждый элемент в объекте верхнего уровня представляет собой строку, а каждый элемент в подмассиве — столбец.
- 2D-типы обычно используются для хранения данных в табличном формате, например, в электронных таблицах или таблицах в базе данных.
Не знаете с чего начать обучение? Прежде чем браться за изучение полноценного языка программирования PHP, разумно будет пройти курс «Веб-разработчик». Если PHP кажется слишком сложным — запишитесь на курс «Основы вёрстки». В указанных курсах вы получите базис для дальнейшего освоения не только PHP но и других языков программирования.
Что такое трёхмерный массив + примеры
Это структура данных, которая хранит коллекцию элементов, где каждый элемент имеет три индекса. Он может использоваться для представления широкого спектра структур данных, таких как матрица, куб или, например, тессеракт.
К числу распространенных применений трехмерных массивов относятся:
- Представление 3D-пространства, например, куба.
- Хранение и манипулирование данными, например, 3D-сеткой значений температуры или давления.
- Хранение и манипулирование данными в больших базах данных.
- Реализация сложных алгоритмов, таких как 3D-версия быстрого преобразования Фурье.
Важно помнить: 3D-массивы могут занимать много памяти и с ними сложно работать, поэтому они не всегда могут быть лучшим выбором для решения конкретной задачи. В таких случаях лучше рассмотреть возможность использования других структур данных, таких как одномерные, двухмерные варианты или другие структуры данных, например, связные списки или деревья.
Пример трехмерного объекта типа array:
<?php
$myarray = array(
array(
array(1, 2),
array(3, 4),
),
array(
array(5, 6),
array(7, 8),
),
);
// Вывести информацию из массива
print_r($myarray);
?>
Как получить доступ к элементам многомерных объектов
В PHP существует два метода доступа к объектам составного массива: цикл for и цикл for each.
Доступ к элементам при помощи цикла for
Пример:
<?php
$favorites = array (
array("Анна",15145154545,"anna@mail.ru"),
array("Ирина",4515415454,"irina@mail.ru"),
array("Тарас",1524690452,"taras@mail.ru"),
array("Ирада",6345267714,"irada@mail.ru")
);
for ($row = 0; $row < 4; $row++) {
echo "Строчка № $row
";
echo "«;
for ($col = 0; $col < 3; $col++) {
echo »- «.$favorites[$row][$col].»
«;
}
echo «</ul>»;
}
?>
Мы поместили for-цикл в другой такой же цикл
Теперь рассмотрим доступ к элементам многомерного массива при помощи цикла for each.
Доступ к элементам при помощи цикла for each
// Доступ к элементам объекта array с помощью цикла for each
foreach($marks as $mark) {
echo $mark['A']. " ".$mark['B']." ".$mark['C']."\n";
}
?>
Для доступа к элементам можно использовать измерения по следующим шаблону:
имя массива['первое измерение']['второе измерение'].
Резюме и полезные видео
Если вы запутались в составных массивах, этот раздел поможет подытожить всё необходимое.
Одномерный
Вот абстрактный пример: у нас есть 10 кирпичей. Мы выкладываем их в ряд. Ряд начинается с кирпича 0 и заканчивается кирпичом 9. При необходимости можно быстро сослаться на любой кирпич используя шаблон brick[x].
Одномерный тип пример
Двухмерный
У нас есть 80 кирпичей. Мы укладываем их рядами по 10 штук, каждый ряд примыкает к другому. Ряд начинается с кирпича 0 нулевого ряда и заканчивается кирпичом 9 седьмого ряда. Вы можете ссылаться на любой кирпич с помощью шаблона brick[x][y]:
Двухмерный
Трехмерный
У нас есть 720 кирпичей. Мы укладываем их рядами по 10 штук и каждый ряд примыкает к другому до 10. Таким образом, сформируется идентичный массив кирпичей 10x8, что и в двумерном примере. Теперь проделаем вышеуказанную последовательность еще 8 раз, располагая блоки кирпичей друг за другом (создавая 10 сложенных блоков и блок кирпичей 10x8x9). Вы можете ссылаться на любой кирпич с помощью шаблона brick[x][y][z].
Трехмерный
Что запомнить
Проще всего представить многомерный массив — подумать о массиве, состоящем из массивов. Но вместо хранения одного элемента такие объекты хранят другой массив по каждому индексу.
PHP — неотъемлемая часть бэкэнд-разработки в 2023 году. Успей попасть в группу сегодня и получи профессию разработчика уже завтра!
Чтобы лучше закрепить тему — обязательно посмотрите эти три видео. Они помогут разобраться в теме еще лучше:
What are multidimensional arrays in PHP
PHP Array Data Type - Indexed, Associative & Multi-Dimensional Arrays
PHP multidimensional array to single array