如果我有一个数组,它使用数字键,并且我添加了一个远超出范围的键,它是否也创建了中间键。例如,如果我有
$array = array(1,2,3,4);
$array[9] = 10;这会导致php在内部为键4-8保留内存,即使它们没有值。
我问的原因是我有一个大的二维数组,我想在动态规划算法中用于回忆录,因为只需要计算总单元格中的一小部分。但是,对于整个2D数组来说,拥有这样大小的空数组将对内存造成负担。有没有更好的方法来做两个关键的回忆录?我可以使用一个关联数组,并将键附加到分隔符或类似的方案中,但是如果php不做额外的键,我更愿意(为了简单和可读性)使用2D数组。有什么想法?
发布于 2014-08-08 20:15:20
这可能没有完全回答你的问题,但应该有助于找到答案,至少对第一个问题。
创建这个程序。
$arr = array(1, 2, 3, 4);
sleep(10);
$arr[100000] = 1;
sleep(10);现在运行它并监视它的内存使用情况。
在前十秒钟内,程序为一个小数组保留内存。
在接下来的十秒钟内,如果数组为未使用的索引保留空间,那么内存的使用率就会比前一个高得离谱。但是,如果不这样做,所使用的内存只会略有增长。
这应该让您了解您的最终程序的效果,无论是否使用2D数组是一个好主意。
发布于 2014-08-08 20:09:06
别担心,不会有额外的钥匙的。PHP不是这样的,即使您认为是常规的数组也是关联数组。您甚至可以像这样组合PHP数组:
array(
1 => 121,
2 => 2112,
'stuff' => array('morestuff'),
'foo' => 1231
)使用PHP,它非常舒适,这也可以是好的和坏的。
发布于 2014-08-08 20:12:43
它似乎不会分配一个占位符或使用任何内存为未使用的密钥,基于道格T.的response。希望这有帮助!
https://stackoverflow.com/questions/25211435
复制相似问题