如果PHP中的数组键存在某些限制?长度 ?不可接受的字符串?
仅在official documentation中找到此信息,但没有关于密钥限制的信息。
键可以是整数或字符串。如果一个键是整数的标准表示,它将被解释为这样(即“8”将被解释为8,而“08”将被解释为“08”)。键中的浮点数被截断为整数。索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引。*
答案 0 :(得分:9)
对数组中用作键的任何字符串进行哈希处理。类似于md5()和sha1(),此散列将(可能是千兆字节)字符减少到已知长度。与md5()或sha1()不同,数组的内部散列机制会将您的字符串转换为整数,然后可以使用该整数来寻址数组中的存储区。 PHP的数组不是真实的/真实的数组 - 它们在内部是某种Linked HashMap。考虑到多个字符串可以归结为相同的散列,每个桶本身就是一个列表。如果同一存储桶中有多个元素,则必须评估每个键。毫无疑问,短键的比较速度超过1MB的文本。
TL; DR:虽然您不受PHP的限制,但您应该限制自己。如果您有相当长的字符串,请考虑通过md5()或sha1()(或实际上任何其他散列函数)运行它们以减少密钥长度。
答案 1 :(得分:4)
What is the max key size for an array in PHP?
这个问题几乎完全相同。但如果你不想信任任何非官方的东西,只要坚持使用较少的小钥匙。您甚至可以从中获得一些性能优势。
编辑:正如The PHP Manual所说:
注意:字符串变得非常大没有问题。 PHP对字符串的大小没有限制;唯一的限制是运行PHP的计算机的可用内存..
答案 2 :(得分:-2)
带关联数组: $ array = new array( 新阵列( "键" = GT;"值" ) );
..至于我认为在理论中的关键,但是长度没有限制。如果你想要重新使用它们,那么选择长按键并不是一个好主意.. < / p>
至于值,您应该只在数组中获取一个战利品,以及允许的数据类型和内容..
希望这会有所帮助..