PHP数组和内存分配

3

突然想到一个问题:
如果我在PHP中这样定义一个数组:

$arr = Array();
$arr[7392171] = "some value";

这个在内部是如何存储的?它将键7392171映射到"some value",还是像JavaScript一样在它之前放置7392170个空值?我猜是前者,因为索引和关联数组是相同的(至少从我的理解上来看),并且与JavaScript中的对象相当。所以,只是想知道 :)

你认为JavaScript为什么会在它前面放置7392170个空值? - Hamish
因为:var arr = []; arr[7392171] = "some value"; 如果你现在查看该数组,你会得到 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, (大量逗号) ,,,,,,,,,,,"some value" - 这就是原因。 - Niet the Dark Absol
哦,因为那个赋值之后,arr.length返回的是7392171。 - Niet the Dark Absol
哪里有“甚至不正确”按钮? - Javier
您可以使用 php -a 在交互式控制台中进行测试。 - Chloe
显示剩余2条评论
2个回答

3

使用var_dump($arr)测试它

如果它创建了739217个空值,你就会看到它:)

干杯:)


嗯,当然。应该意识到这一点。还有Array(1 => "a", 2 => "b")Array(2 => "b", 1 => "a")是不同的事实。感谢您的回答。 - Niet the Dark Absol

0

在PHP中,所有的数组都是以关联方式存储的。键名不需要与其顺序有任何关联。

附带问题 - 这是通过哈希映射实现的吗?


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