Intereting Posts
Ограничение членства по пропускной способности Удаление не-альфа-символов Регулярные выражения PHP сравнивает две даты Файл автозагрузки композитора не работает Как я могу разместить php-скрипт в сетевом веб-приложении dotnet, размещенном на Azure Как мы можем конвертировать видео файлы в формат .flv в php Laravel 5 Перенаправление из другого метода Исключение «сеанс уже запущено …» в приложении Zend Framework Необходима помощь в php-массиве – если текущий элемент массива = «последний или первый элемент», то «сделайте что-нибудь», Загрузка определенных функций PHP Как использовать GROUP_CONCAT с Zend Framework? Ошибка PHP при использовании простого сценария загрузки файлов: не удалось открыть поток: нет такого файла или каталога Не удалось выполнить запрос php curl с номером порта Шаблон проектирования для кэширования кэшированных данных лить число из строки в int изменит значение в php

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

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

Solutions Collecting From Web of "Как ассоциативные массивы реализованы в PHP?"

Это хэш-таблица. Объявление типа и функция хеширования находятся здесь:
http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_hash.h?view=markup

Существует легкий вес и связанный список в spl (стандартный php lib)

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

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

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

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

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

@EBGreen верен.

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

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

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

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