Какой тип данных у массивов в PHP?

Ответ

В PHP массив (array) — это встроенный составной тип данных, который может выступать как упорядоченный список (с числовыми индексами), так и как карта (словарь) с ключами-строками.

Ключевые особенности:

  • Гибкость: Может содержать элементы любых типов, включая другие массивы.
  • Динамический размер: Не требует предварительного объявления размера.
  • Тип ключей: Ключами могут быть целые числа (int) или строки (string). При использовании других типов происходит приведение.
  • Проверка типа: Функция gettype($array) вернет "array". Для строгой проверки используется is_array().

Примеры:

// Индексированный массив
$list = [1, 2, 3]; // array(3) { [0]=> int(1) ... }

// Ассоциативный массив (карта)
$map = ['name' => 'Alice', 'age' => 30];

// Массив с разными типами
$mixed = [42, 'text', true, ['nested']];

var_dump(is_array($list)); // bool(true)
var_dump(gettype($map));   // string(5) "array"

С PHP 8.0 для аннотаций типов также широко используется тип iterable, который включает array и объекты, реализующие интерфейс Traversable.

Ответ 18+ 🔞

Ну, вот смотри, как оно на самом деле. PHP-массив — это такая хитрая жопа, которая умеет быть всем, чем захочет. То ли это простой список по порядку, то ли словарь, где ключ — строка какая-нибудь. Универсальная штука, ёпта.

Что там у него внутри:

  • Гибкость овердохуища: Можешь пихать туда что угодно — числа, строки, булевы значения, а можешь и другой массив воткнуть, и получится массив в массиве, как матрёшка, блядь.
  • Размер динамический: Не надо заранее голову ломать, сколько там ячеек резервировать. Хочешь — добавь, хочешь — убери. Живёт своей жизнью.
  • Ключи — это отдельная история: Ключом может быть либо целое число, либо строка. А если попробуешь какой-нибудь другой тип — он его приведёт, и потом сам от себя охуеешь, когда поймёшь, что там в итоге оказалось.
  • Как проверить, что это массив? Ну, gettype($array) тебе радостно крикнет "array". Но если ты параноик и хочешь строгую проверку — юзай is_array(), и спи спокойно.

Ну, и примеры, чтобы совсем понятно стало:

// Простой список, как в магазине
$list = [1, 2, 3]; // array(3) { [0]=> int(1) ... }

// Ассоциативный массив, он же словарь. Типа, имя -> значение.
$map = ['name' => 'Alice', 'age' => 30];

// А тут у нас бардак полный, все типы в кучу
$mixed = [42, 'text', true, ['nested']];

var_dump(is_array($list)); // bool(true)
var_dump(gettype($map));   // string(5) "array"

И да, чувак, с PHP 8.0 все умные дяди в аннотациях типов часто пишут iterable. Это такой общий термин, который покрывает и обычные массивы, и объекты, которые умеют перебираться (те, что Traversable реализуют). Чтобы голова не болела.