【问题标题】:PHP arrays and memory allocationPHP数组和内存分配
【发布时间】:2010-11-19 00:36:27
【问题描述】:

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

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

这是如何在内部存储的?它将键 7392171 映射到“某个值”,还是像 JavaScript 一样工作并在其前面放置 7392170 个空值?
我猜是前者,因为索引数组和关联数组是相同的(至少根据我的理解)并且与 JavaScript 中的对象相当。
所以是的,只是想知道:)

【问题讨论】:

  • 你认为 JavaScript 为什么会在它前面放 7392170 个空值???
  • 因为:var arr = []; arr[7392171] = "some value"; 如果您现在查看该数组,您会得到,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, (massive number of commas) ,,,,,,,,,,,"some value" - 这就是原因。
  • 哦,因为在分配之后,arr.length 返回 7392171。
  • “没有错”按钮在哪里?
  • @Kolink JavaScript 没有创建元素 - 例如,如果你这样做 for(i in arr) { console.log(i) } 它只会报告单个键。问题是 ECMASCript 数组期望是一个有序列表,但您将它视为一个对象,因此 .length 报告了不正确的计数。仅供参考,无论您使用什么来查看逗号,都使用了同样的错误假设。

标签: php arrays memory


【解决方案1】:

var_dump($arr)测试它

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

干杯:)

【讨论】:

  • 嗯,当然。应该意识到这一点。还因为Array(1 => "a", 2 => "b")Array(2 => "b", 1 => "a") 是不同的。感谢您的回答。
【解决方案2】:

所有数组都以关联方式存储在 PHP 中。键名不必与其顺序有任何联系。

附带问题 - 我猜这是通过哈希映射完成的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-23
    • 2020-08-25
    • 2011-12-15
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多