Как ассоциативные массивы реализованы в PHP?

Может ли кто-нибудь объяснить, как PHP реализует ассоциативные массивы? Какая базовая структура данных использует PHP? Является ли PHP хэш ключом и хранит его в каком-то хэш-карте? Мне любопытно, потому что мне было интересно, что такое производительность ассоциативных массивов, где при вставке и поиске ключей.

Ответ 2

Ну, для чего это необходимо, all Массивы PHP являются ассоциативными массивами.

Ответ 3

Самая высокая пропущенная ссылка ответа нарушена и не дает такого объяснения.

PHP написан на C, а базовая структура - это просто массив C. C - это просто куски памяти. Индексы в массивах C должны быть непрерывными, вы не можете иметь индекс 0 и индекс 1000, который следует за ним. Чтобы создать ассоциативные ключи массива, прежде чем они будут добавлены в массив C, они преобразуются в собственные индексы C с помощью хеш-функции.

Для полного объяснения я нашел эту ссылку более информативной.

http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html

Ответ 4

@EBGreen верен.

Это дает вам некоторые интересные проблемы с производительностью, особенно при обработке массива в виде списка и использовании оператора [] (массив add). PHP, похоже, не кэширует самый большой числовой ключ и не добавляет его к нему, вместо этого он, похоже, пересекает все ключи, чтобы найти, что должен делать следующий цифровой ключ. Я перезаписал скрипты на python из-за неутешительной производительности массива в виде PHP.

Ассоциативные массивы имеют стандартные накладные расходы dict/hash.

Ответ 5

Все хэш-таблицы, согласно источникам на различных веб-форумах: http://www.usenet-forums.com/php-language/15348-zend-engine-array-implementation.html

Если вы хотите быть уверенным, прочитайте исходный код, затем скомпилируйте его, но убедитесь, что доверяете своему компилятору (Внимание!, и несвязанный, но очень крутой).