Ограничения ключей (индексов) ассоциативного массива PHP? - PullRequest
9 голосов
/ 29 февраля 2012

Есть ли какие-то ограничения для ключей массива в PHP?Длина?Недопустимые строки?

В официальной документации найдено только это, но нет информации об ограничениях ключей.

Ключ может быть целым илистрока.Если ключ является стандартным представлением целого числа, оно будет интерпретировано как таковое (т. Е. «8» будет интерпретировано как 8, а «08» будет интерпретировано как «08»).Поплавки в ключе усекаются до целого числа.Индексированные и ассоциативные типы массивов - это один и тот же тип в PHP, который может содержать как целые, так и строковые индексы. *

Ответы [ 3 ]

9 голосов
/ 29 февраля 2012

Любая строка, используемая в качестве ключа в массиве, хэшируется.По аналогии с md5 () и sha1 () это хэширование уменьшает (потенциально гигабайты) символов до известной длины.в отличие от md5 () или sha1 () механизм внутреннего хэширования массива преобразует вашу строку в целое число, которое он может затем использовать для адресации сегмента в массиве.Массивы PHP не являются настоящими / реальными массивами - они представляют собой своего рода внутреннюю компоновку HashMap.Учитывая, что несколько строк могут сводиться к одному и тому же хешу, каждая корзина представляет собой список.Если в одном сегменте есть несколько элементов, каждый ключ должен быть оценен.Само собой разумеется, что короткие клавиши сравниваются быстрее, чем 1 МБ текста.

TL; DR: хотя вы не ограничены PHP, вы должны ограничить себя.Если у вас достаточно длинные строки, попробуйте выполнить их через md5 () или sha1 () (или любую другую функцию хеширования), чтобы уменьшить длину ключа.

4 голосов
/ 29 февраля 2012

Каков максимальный размер ключа для массива в PHP?

Этот вопрос почти такой же. Но если вы не хотите доверять чему-то неофициальному, просто придерживайтесь менее маленьких ключей. Вы можете даже получить некоторые преимущества в производительности.

РЕДАКТИРОВАТЬ: И как Руководство PHP говорит:

Примечание. Строка не становится большой. PHP не накладывает никаких ограничений на размер строки; единственным ограничением является доступная память компьютера, на котором работает PHP ..

0 голосов
/ 29 февраля 2012

ты уверен, что ссылаешься на ключ? или ты имеешь ввиду значение?

с ассоциативными массивами: $ массив = новый массив ( новый массив ( «Ключ» => «значение» ) );

.. что касается ключа, я думаю, что в теории нет ограничений на длину, однако ... выбор длинных ключей не будет хорошей идеей, если вы захотите многократно использовать их повторно ..

Что касается значений, вы должны просто взять добычу на массивах в целом, и какие типы данных разрешены и прочее.

надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...