PHP关联数组的键(索引)限制?

Fed*_*TIK 9 php arrays key

如果PHP中的数组键有某些限制?长度 ?不接受的字符串?

官方文档中只发现了这一点,但没有关于密钥限制的信息.

键可以是整数或字符串.如果一个键是整数的标准表示,它将被解释为这样(即"8"将被解释为8,而"08"将被解释为"08").键中的浮点数被截断为整数.索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.*

rod*_*ehm 9

用作数组中键的任何字符串都是经过哈希处理的.类似于md5()和sha1(),此散列将(可能是千兆字节)字符减少到已知长度.与md5()或sha1()不同,数组的内部散列机制会将您的字符串转换为整数,然后可以使用该整数来寻址数组中的存储区.PHP的数组不是真正的/真实的数组 - 它们在内部是某种Linked HashMap.考虑到多个字符串可以归结为相同的散列,每个桶本身就是一个列表.如果同一存储桶中有多个元素,则必须评估每个键.毫无疑问,短键的比较速度超过1MB的文本.

TL; DR:虽然您不受PHP的限制,但您应该限制自己.如果您有相当长的字符串,请考虑通过md5()或sha1()(或实际上任何其他散列函数)运行它们以减少密钥长度.

  • 你不喜欢自己的矛盾吗?如果在内部对字符串进行哈希处理,为什么要对"相当长"的字符串进行哈希?更不用说你会失去对unicity的理论保证(因此你做了什么?你重新发明整个数据结构,列表等吗?)你的TL; DR部分似乎与第一段相矛盾,我没有看到任何推理在它背后. (2认同)

Mic*_*elH 5

PHP 中数组的最大键大小是多少?

这个问题几乎完全一样。但是,如果您不想相信任何非官方的东西,请坚持使用较少的小密钥。您甚至可以从中获得一些性能优势。

编辑:正如PHP 手册所说:

注意:字符串变得非常大是没有问题的。PHP 对字符串的大小没有限制;唯一的限制是运行 PHP 的计算机的可用内存。

  • 字符串没有禁止字符。但是请注意字符串 / 中的反斜杠,因为它会转义下一个字母。 (2认同)