Массив

Оригинальное название: array

Коротко

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

Что такое «Массив»

Почти любая программа работает со списками: товары в корзине, строки из файла, записи из базы. Хранить каждую в отдельной переменной невозможно, поэтому значения складывают в массив и обращаются к ним по номеру: $items[0], $items[1]. Счёт в большинстве языков начинается с нуля.

В языках вроде C массив — непрерывный участок памяти с элементами одного типа и фиксированной длиной. Благодаря этому адрес любого элемента вычисляется арифметически, и доступ по индексу занимает одинаковое время независимо от размера. Вставка в середину, напротив, требует сдвинуть все последующие элементы. Если частые вставки важнее доступа по номеру, выбирают другую структуру данных, например связный список.

Массивы в PHP устроены иначе

В PHP массив — это упорядоченная хеш-таблица: он одновременно и список, и словарь. Ключи могут быть числами или строками, размер меняется на ходу, а порядок добавления сохраняется. Поэтому одна и та же конструкция описывает и список товаров, и настройки, и строку из базы. В JavaScript для этих задач два разных типа: Array для списков и объект или Map для пар «ключ — значение». При кодировании в JSON PHP-массив с ключами 0, 1, 2 станет массивом, а с произвольными ключами — объектом.

Пример: выборка из массива товаров

$products = [
    ['id' => 1, 'name' => 'Чайник', 'price' => 2500, 'stock' => 0],
    ['id' => 2, 'name' => 'Тостер', 'price' => 3900, 'stock' => 4],
];

$inStock = array_filter($products, fn($p) => $p['stock'] > 0);
$names   = array_column($inStock, 'name', 'id');

echo json_encode($names, JSON_UNESCAPED_UNICODE); // {"2":"Тостер"}

array_filter() оставляет товары в наличии, array_column() собирает названия с ключами по id. Обратите внимание: ключи после фильтрации сохраняются, поэтому получился объект, а не список. Если нужен список, результат пропускают через array_values().

Типичные ошибки

  • Обращение к несуществующему ключу. В PHP 8 это предупреждение «Undefined array key», а не тихий null; проверяйте через isset() или оператор ??.
  • Цикл по ссылке foreach ($a as &$v) без unset($v) после него: следующий цикл с той же переменной перезапишет последний элемент.
  • Загрузка десятков тысяч записей из базы в один массив. Память заканчивается, и выборку лучше делать порциями.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение