【发布时间】:2012-03-18 18:58:49
【问题描述】:
如果 PHP 中的数组键有某种限制?长度 ?不可接受的字符串?
在official documentation中只找到了这个,但是没有关于keys限制的信息。
键可以是整数或字符串。如果键是整数的标准表示,它将被解释为整数(即“8”将被解释为 8,而“08”将被解释为“08”)。键中的浮点数被截断为整数。索引和关联数组类型在 PHP 中是同一种类型,既可以包含整数索引,也可以包含字符串索引。*
【问题讨论】:
如果 PHP 中的数组键有某种限制?长度 ?不可接受的字符串?
在official documentation中只找到了这个,但是没有关于keys限制的信息。
键可以是整数或字符串。如果键是整数的标准表示,它将被解释为整数(即“8”将被解释为 8,而“08”将被解释为“08”)。键中的浮点数被截断为整数。索引和关联数组类型在 PHP 中是同一种类型,既可以包含整数索引,也可以包含字符串索引。*
【问题讨论】:
What is the max key size for an array in PHP?
这个问题几乎完全相同。但是,如果您不想信任任何非官方的东西,那就坚持使用较少的小密钥。您甚至可以从中获得一些性能优势。
编辑:正如The PHP Manual 所说:
注意:字符串变得非常大是没有问题的。 PHP 对字符串的大小没有限制;唯一的限制是运行 PHP 的计算机的可用内存。
【讨论】:
在数组中用作键的任何字符串都会被散列。类似于 md5() 和 sha1() 这种散列将(可能是千兆字节的)字符减少到已知长度。与 md5() 或 sha1() 不同,数组的内部散列机制会将您的字符串转换为整数,然后可以使用它来寻址数组中的存储桶。 PHP 的数组不是真正的/真正的数组——它们在内部是某种 Linked HashMap。考虑到多个字符串可以归结为同一个哈希,每个桶本身就是一个列表。如果同一个桶中有多个元素,则必须评估每个键。不用说,短键的比较速度比 1MB 的文本要快。
TL;DR:虽然你不受 PHP 的限制,但你应该限制自己。如果您有相当长的字符串,请考虑通过 md5() 或 sha1()(或任何其他散列函数,实际上)运行它们以减少密钥长度。
【讨论】:
您确定您指的是密钥吗?还是你的意思是价值?
使用关联数组: $数组 = 新数组( 新数组( “键”=>“值” ) );
.. 至于密钥,我认为理论上没有长度限制,但是.. 如果您想大量重复使用它们,那么选择长密钥并不是一个好主意..
至于值,您通常应该在数组中掠夺一下,以及允许使用哪些数据类型等等。
希望这会有所帮助..
【讨论】: