PHP无止境循环

PHP无止境循环,php,html,session,loops,Php,Html,Session,Loops,我有一段代码,它会导致一个无休止的循环,但只有在某些情况下 这是一个购物车数量的变化,目前购物车工作正常时,改变数量的最后一个项目添加。但是,例如,如果我的购物车中有3件物品,我无法更改第一件或第二件物品的数量,因为循环无休止地运行 我不确定这段代码出了什么问题,我发现了类似的问题,但没有解决办法 代码如下所示: foreach ($_SESSION["cart"] as $each_item) { $i++; while (list($key, $va

我有一段代码,它会导致一个无休止的循环,但只有在某些情况下

这是一个购物车数量的变化,目前购物车工作正常时,改变数量的最后一个项目添加。但是,例如,如果我的购物车中有3件物品,我无法更改第一件或第二件物品的数量,因为循环无休止地运行

我不确定这段代码出了什么问题,我发现了类似的问题,但没有解决办法

代码如下所示:

foreach ($_SESSION["cart"] as $each_item) { 
          $i++;
          while (list($key, $value) = each($each_item)) {
              if ($key == "item_id" && $value == $item_to_adjust) {
                  // That item is in cart already so let's adjust its quantity using array_splice()
                  array_splice($_SESSION["cart"], $i-1, 1, array(array("item_id" => $item_to_adjust, "quantity" => $quantity)));
              } // close if condition
          } // close while loop
                if ($i > 50) die("manual termination");
} // close foreach loop
如果在将2个项目添加到购物车时在会话上执行var_转储,则会显示以下内容:

array(2){[0]=>array(2){[“item_id”]=>string(11)“100-C09EJ01”[“quantity”]=>string(1)“3”}[1]=>array(2){[“item_id”]=>string(11)“700-CF220EJ”[“quantity”]=>int(1)}

有人能帮我吗


提前谢谢。

问题是在循环数组时修改数组。一个非常简单的解决方案是修改数组的副本,然后在循环完成后替换原始副本

$newcart = $_SESSION["cart"];
foreach ($_SESSION["cart"] as $each_item) { 
  $i++;
  while (list($key, $value) = each($each_item)) {
    if ($key == "item_id" && $value == $item_to_adjust) {
      array_splice($newcart, $i-1, 1, array(array("item_id" => $item_to_adjust, "quantity" => $quantity)));
    }
  }
  if ($i > 50) die("manual termination");
}
$_SESSION["cart"] = $newcart;

问题是,您在对数组进行循环时正在修改它。一个非常简单的解决方案是修改数组的副本,然后在循环完成后替换原始副本

$newcart = $_SESSION["cart"];
foreach ($_SESSION["cart"] as $each_item) { 
  $i++;
  while (list($key, $value) = each($each_item)) {
    if ($key == "item_id" && $value == $item_to_adjust) {
      array_splice($newcart, $i-1, 1, array(array("item_id" => $item_to_adjust, "quantity" => $quantity)));
    }
  }
  if ($i > 50) die("manual termination");
}
$_SESSION["cart"] = $newcart;

$\u SESSION[“cart”]
中有什么?您可以在您的问题中添加一个
$\u SESSION
的变量转储吗?您在
中使用每个($\u SESSION[“cart”…)
中的
$\u SESSION[“cart”]
数组拼接($\u SESSION[“cart”…)
)!!!不要这样做@安德鲁斯:好的,我已经把这个问题包括进去了。(furas)…谢谢你的提醒,但我从在线教程中获得了这段代码,我不知道还有什么其他方法可以这样做
$\u SESSION[“cart”]
?你能在你的问题中添加一个
$\u SESSION
的变量转储吗?你可能重复使用
$\u SESSION[“cart”]
foreach($\u SESSION[“cart”…)
然后在
$\u会话[“cart”]
阵列拼接($\u会话[“cart”])中更改元素。
!!!不要这样做@安德鲁斯:好的,我已经把这个问题包括进去了。(furas)…谢谢你的提醒,但我从网上的一个教程中得到了这段代码,我不知道还有什么其他方法可以做到这一点谢谢你Justin!!这已经解决了:-)我已经被困在这个问题上好几个小时了…非常感谢这
$newcart=$\u SESSION[“cart”]创建一个副本谢谢Justin!!这已经解决了:-)我已经被困在这个问题上好几个小时了…非常感谢这
$newcart=$\u SESSION[“cart”]创建一个副本