【问题标题】:Does Empty indexes exists in memory内存中是否存在空索引
【发布时间】:2015-09-09 00:47:55
【问题描述】:

我创建了一个类似的数组

arr[15] = "hello";
arr[21] = "world";

0141520 有空索引。这些空索引是否存储在内存中。它们会导致内存消耗吗?可以为数组设置随机索引吗?谢谢

【问题讨论】:

  • 从哪里创建空索引?
  • 除非你指定$arr[14]=0; 它们不存在,所以不要消耗内存。 “索引”只是一个指向位置的指针 - 这并不意味着它之前的每个位置都必须存在:)
  • 很容易用 if(isset(arr[10])) .. blabla
  • 检查 this answer - 尽管上下文不同,但它很好地解释了数组结构(PHP 7 之前)

标签: php arrays memory


【解决方案1】:

这里是从 0 到 14 和 15 到 20 的空索引。这些空索引是否存储在内存中。它们是否会导致内存消耗

如果你创建了一个包含这些键的数组,那么是的,它们会占用内存

如果您创建 array

$array = array();
var_dump(isset($array));//bool(true)

那么它也会消耗内存。因此,如果您的数组包含空值,那么它也会消耗内存

Null 将被强制转换为空字符串,即键 null 将实际存储在 "" 下。

Check Docs

【讨论】:

  • 投反对票的原因
  • 你说不存在的键占用内存,这是完全错误的。
  • 不,@deceze 我不是这么说的,但是当我读到我的答案时,我明白了为什么我被否决了
  • 我认为 OP 的措辞有点误导。我认为“空”是指不存在,即那些键从未创建。以 “是” 开头的答案仍然很容易被误解。
  • 是的,你是对的 OP 的措辞有点误导。这就是为什么我指定 是的,如果您创建了一个包含这些键的数组,它们将占用内存
【解决方案2】:

PHP 数组是关联的,也称为字典,也称为哈希图,也称为键值存储。密钥之间没有关系,这意味着密钥15 的存在并不意味着密钥14 的存在,正如密钥'foo' 的存在并不意味着密钥'bar' 的存在一样。因此 PHP 数组都是 sparse。当您创建密钥 15 时,PHP 确实填充密钥 0-14。它们不存在也不占用内存。

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 2021-07-22
    • 2010-10-22
    • 2016-05-03
    • 2013-02-24
    • 2012-11-30
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多