Значением массива может быть абсолютно все, в том числе и массив. В этом случае синтаксис может выглядеть немного необычно, поэтому мы решили разобрать его в этом уроке.
Создать массив в массиве можно так:
<?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
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.