Ограничения ключей (индексов) ассоциативного массива PHP?

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

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

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

3 ответов


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

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

EDIT: и руководство по PHP говорит:

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


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

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


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

с ассоциативными массивами : $массив = новый массив( новый массив( "ключевая ценность" ) );

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

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

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