Значением массива может быть всё, что угодно, в том числе массив. В этом случае синтаксис может выглядеть немного необычно, поэтому разберём его отдельным уроком. Создать массив в массиве можно так:
<?php
$numbers = [[3]];
count($numbers); // 1
$numbers = [1, [3, 2], [3, [4]]];
count($numbers); // 3
Каждый элемент, являющийся массивом, рассматривается как единое целое, что видно по размеру второго массива. Вложенность никак не ограничивается. Можно создавать массив массивов массивов и т. д.
Обращение ко вложенным массивам выглядит уже немного необычно, хотя и логично:
<?php
$numbers = [[3]];
$numbers[0][0]; // 3
$numbers = [1, [3, 2], [3, [4]]];
$numbers[2][1][0]; // 4
Возможно, с непривычки вы не всегда сразу точно увидите, как добраться до нужного элемента, но это всего лишь вопрос тренировок.
Изменение и добавление массивов в массив:
<?php
$numbers = [[3]];
$numbers[0] = [2, 10];
$numbers[] = [3, 4, 5];
// [[2, 10], [3, 4, 5]]
Вложенные массивы можно изменять напрямую, просто обратившись к нужному элементу:
<?php
$numbers = [[3]];
$numbers[0][0] = 5;
// [[5]]
То же самое касается и добавления нового элемента:
<?php
$numbers = [[3]];
$numbers[0][] = 10;
// [[3, 10]]
Для чего вообще могут понадобиться вложенные массивы? Таких примеров довольно много, начиная от математических концепций, например, матриц, заканчивая представлением игровых полей. Помните игру крестики-нолики? Это как раз тот самый случай.
Разберём для примера такую задачку. Дано игровое поле для крестиков-ноликов. Нужно написать функцию, которая проверяет, есть ли на этом поле хотя бы один крестик или нолик, в зависимости от того, что попросят проверить.
<?php
// Инициализируем поле
// array_fill создаёт массив https://php.net/manual/ru/function.array-fill.php
$field = [
array_fill(0, 3, null),
array_fill(0, 3, null),
array_fill(0, 3, null),
];
// Код выше создаёт массив следующей структуры:
// [
// [null, null, null],
// [null, null, null],
// [null, null, null]
// ]
// Делаем ход:
$field[1][2] = 'x';
// [
// [null, null, null],
// [null, null, 'x'],
// [null, null, null]
// ]
Теперь реализуем функцию, которая выполняет проверку:
<?php
function check($field, $symbol)
{
// Обходим поле. Каждый элемент это строчка в игровом поле.
foreach ($field as $row) {
// in_array - проверяет присутствует ли элемент в массиве
// Если присутствует, значит мы нашли то, что искали
if (in_array($symbol, $row)) {
return true;
}
}
// Если поле было просмотрено, но ничего не нашли, значит ходов не было
return false;
}
Проверим:
<?php
check($field, 'x'); // true
check($field, 'o'); // false
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт