PHP 中的简单数组推送超出了允许的内存。 (允许的内存大小为 33554432 字节耗尽(尝试分配 33554440 字节))
Simple array push in PHP exceeds allowed memory. (Allowed memory size of 33554432 bytes exhausted (tried to allocate 33554440 bytes) )
此代码是一个更大程序的一部分,但我确定这是问题所在。我只需要在数组的相同索引处获得相同的值,这是我编写的代码:
$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);
它给了我这个错误:
Allowed memory size of 33554432 bytes exhausted (tried to allocate 33554440 bytes)
在此处添加更多内存不是一种选择。
问题是你的 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。这将解决内存大小错误,但您还应该在比较它们之前检查键是否存在。
此代码是一个更大程序的一部分,但我确定这是问题所在。我只需要在数组的相同索引处获得相同的值,这是我编写的代码:
$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);
它给了我这个错误:
Allowed memory size of 33554432 bytes exhausted (tried to allocate 33554440 bytes)
在此处添加更多内存不是一种选择。
问题是你的 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。这将解决内存大小错误,但您还应该在比较它们之前检查键是否存在。