这段代码是一个更大程序的一部分,但我认为这是问题所在。我只需要在数组的相同索引处获取相同的值,这是我编写的代码:
$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 字节)
在此添加更多内存不是一个选择。
问题是你的 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是否存在。