Массив
Оригинальное название: 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)после него: следующий цикл с той же переменной перезапишет последний элемент. - Загрузка десятков тысяч записей из базы в один массив. Память заканчивается, и выборку лучше делать порциями.

