PHP数字数组索引和内存

时间:2014-08-08 20:05:10

标签: php arrays indexing memoization

如果我有一个使用数字键的数组,并且我在远远超出该范围的位置添加了一个键,它是否也创建了中间键。例如,如果我有

$array = array(1,2,3,4);
$array[9] = 10;

这会导致php在内部为4-8键保留内存,即使它们没有值。

我问的原因是我有一个大的2D数组,我想在动态编程算法中用于记忆,因为只需要计算少量的总细胞。然而,对于完整的2D阵列而言,对于具有该大小的空数组的内存将是非常重要的。有没有更好的方法来做两个关键的记忆?我可以使用一个关联数组,并使用分隔符或类似的方案附加键,但如果php不能创建额外的键,我宁愿(为了简单和可读性)只使用2D数组。想法?

3 个答案:

答案 0 :(得分:2)

不用担心,它不会制作任何额外的密钥。 PHP不是那样的,即使你认为常规的数组也是关联数组。你甚至可以像这样组合PHP数组:

array(
     1 => 121,
     2 => 2112,
     'stuff' => array('morestuff'),
     'foo' => 1231
)

使用PHP非常舒适,也可以是好的和坏的。

答案 1 :(得分:2)

这可能无法完全回答您的问题,但应该有助于找到答案,至少对第一个问题有帮助。

创建此程序。

$arr = array(1, 2, 3, 4);
sleep(10);
$arr[100000] = 1;
sleep(10);

现在运行它并监视其内存使用情况。

在前十秒内,程序为小阵列保留内存。

在接下来的十秒钟内,如果阵列为未使用的索引保留空间,则与前一个相比,内存使用率会高得离谱。但是,如果它没有,那么所使用的内存只会略有增长。

这可以让您了解最终程序的效果,无论是否使用2D数组都是个好主意。

答案 2 :(得分:0)

根据Doug T.的response,似乎不会为未使用的密钥分配占位符或使用任何内存。希望这有帮助!