0

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

它用于购物车数量的更改,并且在更改最后添加的物品的数量时购物车可以正常工作。但例如,如果我在购物车中有 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,它会显示以下内容:

数组(2){[0]=>数组(2){[“item_id”]=>字符串(11)“100-C09EJ01”[“数量”]=>字符串(1)“3”}[1]= > 数组(2) { ["item_id"]=> 字符串(11) "700-CF220EJ" ["数量"]=> int(1) } }

有人可以帮我吗?

先感谢您。

4

1 回答 1

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;
于 2013-06-06T15:02:20.260 回答