Выбор ответа Senior Массивы изнутри обновлено

Как устроен массив PHP

Вопрос

Как устроен массив (array) в PHP 7+ внутри?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Упорядоченная хеш-таблица: бакеты в порядке вставки плюс хеш-индекс. PHP-массив это HashTable: элементы лежат в непрерывном массиве бакетов в порядке вставки, а отдельный хеш-индекс ведёт к ним по ключу.

Варианты ответа

  1. Обычный C-массив фиксированного размера, а строковые ключи хранятся отдельно
  2. Сбалансированное дерево поиска по ключам, поэтому доступ всегда O(log n)
  3. Упорядоченная хеш-таблица: бакеты в порядке вставки плюс хеш-индексправильный ответ
  4. Двусвязный список пар ключ-значение с отдельным индексом по числам

Разбор

PHP-массив это HashTable: элементы лежат в непрерывном массиве бакетов в порядке вставки, а отдельный хеш-индекс ведёт к ним по ключу. Поэтому доступ по ключу в среднем O(1), а foreach идёт в порядке вставки. Для списков с последовательными целыми ключами используется packed array без хеш-части, это экономит память. Дерева и связного списка внутри нет, размер растёт удвоением.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.