当添加一个巨大的数字键时,PHP数组的内存使用情况是多少?

9
如果我想使用一个PHP非关联数组像字典一样,并添加一个大键,PHP会分配多少内存?
$myArray = Array();
$myArray[6000] = "string linked to ID 6000";
$myArray[7891] = "another key-value pair";

PHP是否也会为未使用的键0-5999和6001-7890分配内存?
2个回答

15
不,PHP没有实现类似C风格数组的功能。正如PHP关于数组的文章所述,PHP数组是关联容器。

在PHP中,数组实际上是一个有序映射。 映射是一种将值与键相关联的类型。

由于顺序得到保留,因此该数组很可能是某种二叉搜索树。如果您不熟悉二叉搜索树,我建议您阅读一本好的数据结构书籍进行学习,或者查看此维基百科文章了解更多信息。 您上面的示例将产生具有两个节点的二叉搜索树——一个用于键6000处的数据,另一个用于键7891处。

13
请注意,如果您将其通过json_encode()传递,那么会创建0-5999键 - json不喜欢PHP的稀疏数组。 - Marc B
当我执行 $myArray[strtotime($date)] = ... 时,会出现内存不足的情况,这似乎表明了其他情况。 - William Entriken
1
不好意思,我试图使用一个巨大的数字来索引一个字符串。这会导致程序崩溃。动态类型真是太蠢了。 - William Entriken

2
它不会为索引0-5999分配内存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接