PHP无休止的循环

时间:2013-06-06 14:54:19

标签: php html session loops

我有一段代码导致无限循环但仅在某些情况下。

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

我不确定此代码有什么问题我发现了类似的问题,但没有解决方案。

代码如下所示:

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件物品时在SESSION上进行了var_dump,则会显示以下内容:

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)}}

有人能帮帮我吗?

提前谢谢你。

1 个答案:

答案 0 :(得分:3)

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

$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;