为什么PHP允许内存大小为134217728字节耗尽?

时间:2015-07-06 05:49:39

标签: php arrays algorithm sorting memory

我从CodeEval中解决了一些问题并在PHP中遇到了这个奇怪的错误。我还没有和其他语言碰到这样的事情,所以我不知道为什么会这样。没有包括整个答案(请不要帮助我找到解决方案,除了PHP以这种方式行事的原因),这就是我遇到问题的地方:&/ p>

for ($j = 0; $j < count($beauty); $j++) {
        $temp = $beauty[$j];
        $beauty[$j] = $beauty[$j+1];
        $beauty[$j+1] = $temp;      
    }

基本上我已经计算了每个单独的字母,现在我要对包含这些值的数组进行排序,这样我就可以确定&#34;美容&#34;的字符串。奇怪的是我得到了错误:

  

允许的内存大小为134217728字节耗尽

运行上面的代码块时。更奇怪的是,当我在for循环中取出最后一行时,我不再收到错误。

for ($j = 0; $j < count($beauty); $j++) {
        $temp = $beauty[$j];
        $beauty[$j] = $beauty[$j+1];
    }

工作得很好,我无法解决这个问题。我想也许有一些奇怪的事情,比如PHP通过引用传递数组中的值,或者通常通过引用传递变量值,这可能会导致问题,但我不会看到那个&#39是这样的。我不明白为什么将以下数组位置的值设置为存储在$ temp中的值会导致程序占用大量内存。在这种情况下,循环仅适用于计数为19的数组。我无法想象19个整数如何在内存中占用128Mb的空间,即使我们在每次传递中都进行了交换。 / p>

任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

您正在此行创建一个无限循环:

$beauty[$j+1] = $temp;

因为在$beauty循环的每次迭代中,你都在添加一个新的元素,你的循环永远不会完成