PHP 中的简单数组推送超出了允许的内存。 (允许的内存大小 33554432 字节已耗尽(尝试分配 33554440 字节))

问题描述 投票:0回答:1

这段代码是一个更大程序的一部分,但我认为这是问题所在。我只需要在数组的相同索引处获取相同的值,这是我编写的代码:

$a1=array(1,1,2);
$a2=array(1,2);
$a3=array(1,1);
$a4=array(1,1,3);
$a5=array(1,1,1,1);

$same= array();
for($i=0; $i<3; $i++){
    while($a1[$i]==$a2[$i] && $a1[$i]==$a3[$i] && $a1[$i]==$a4[$i] && $a1[$i]==$a5[$i]){
        array_push($same, $a1[$i]);
    }
}
print_r($same);

它给了我这个错误:

允许的内存大小 33554432 字节已耗尽(尝试分配 33554440 字节)

在此添加更多内存不是一个选择。

php memory-management memory-leaks
1个回答
0
投票

问题是你的 while 循环无限运行。

 while($a1[$i]=$a2[$i]=$a3[$i]){

看到等号了吗?您只是从右到左将一个值分配给另一个值。如果你想检查它们是否都相等,你可以执行以下操作:

 while($a1[$i] == $a2[$i] && $a1[$i] == $a3[$i] && $a2[$i] == $a3[$i]){

总的来说,我认为代码可以而且应该改进。您不应将

for loop
限制为硬编码数字。相反,将其限制为最小数组长度。有很多方法可以解决这个问题。

编辑:

您的 while 循环无限运行,因为当索引 $i 为零时,所有值都相等,并且它会陷入 while 循环中。将 while 循环 替换为 if。这将解决内存大小错误,但您还应该在比较之前检查keys是否存在。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.