如果我有一个使用数字键的数组,并且我在远远超出该范围的位置添加了一个键,它是否也创建了中间键。例如,如果我有
$array = array(1,2,3,4);
$array[9] = 10;
这会导致php在内部为4-8键保留内存,即使它们没有值。
我问的原因是我有一个大的2D数组,我想在动态编程算法中用于记忆,因为只需要计算少量的总细胞。然而,对于完整的2D阵列而言,对于具有该大小的空数组的内存将是非常重要的。有没有更好的方法来做两个关键的记忆?我可以使用一个关联数组,并使用分隔符或类似的方案附加键,但如果php不能创建额外的键,我宁愿(为了简单和可读性)只使用2D数组。想法?
答案 0 :(得分:2)
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,似乎不会为未使用的密钥分配占位符或使用任何内存。希望这有帮助!