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

PHP中的简单数组推送超出了允许的内存。(已耗尽33554432字节的允许内存大小(尝试分配33554440字节)),php,memory-management,memory-leaks,Php,Memory Management,Memory Leaks,这段代码是一个更大程序的一部分,但我认为这就是问题所在。我只需要在数组的相同索引处获得相同的值,这是我编写的代码: $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=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);
$a1=数组(1,1,2);
$a2=阵列(1,2);
$a3=阵列(1,1);
$a4=阵列(1,1,3);
$a5=数组(1,1,1,1);
$same=array();

对于($i=0;$i而言,问题在于while循环无限运行

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

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

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

总的来说,我认为代码可以而且应该改进。您不应该将
for循环
限制为硬编码的数字。相反,将其限制为最小的数组长度。有很多方法可以解决此问题

编辑:


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

你能给我一个适当的解释,说明你在这里真正需要达到的目标吗?我不能从你的描述中看出,代码对我来说也没有足够的意义,无法从中看出。
而($a1[$I]=$a2[$I]=$a3[$I])
——这些都是赋值,因此该表达式的值将始终是
$a3[$I]
–你确定这就是你真正想要开始的吗?我想从5个不同的数组中获得相同键的相同值。我已经使用“==”检查是否相等,并像这样比较它们
$a1[$I]==$a2[$I]&&$a1[$I]=$a3[$I]&$a1[$I]=$a4[$I]&$a1[$I]=$a5[$I]
在我的while循环中,但它仍然给我错误。“我想从5个不同的数组中获得相同键的相同值。”-仍然不清楚这到底意味着什么。请阅读,然后请给我们一个适当的解释-包括示例输入数据,以及基于此您希望得到的确切结果。对于文章中给出的数组,下面的循环应该输出具有相同键的值。因此,对于这些数组,
$相同的
数组现在只能包含一个值。
[0]=>1
因为
$a2
数组的下一个位置的数字与其他位置的数字不同。我仍然不完全清楚您到底想要什么。为什么for循环会变成
$I我需要比较的实际上是5个数组,我想在这里简化它可能会有帮助,但没有。我这样比较它们在我的while循环中:
$a1[$i]==a2[$i]&&a1[$i]==a3[$i]&&a1[$i]==a4[$i]&&a1[$i]==a5[$i]
但将这些值放入不同数组时仍然会出现相同的错误。我明白了。顺便说一句,您将值放入一个数组,然后打印一个空数组。这是故意的吗?忘记更改该数组,变量是用不同的语言编写的。如果可能,请使用原始代码更新您的问题。因为现在无限循环是由while loopCode中的赋值操作引起的,该操作与原始代码一样使用数组更新!