首页
学习
活动
专区
圈层
工具
发布

问PHP循环
EN

Stack Overflow用户
提问于 2013-06-06 14:54:18
回答 1查看 119关注 0票数 0

我有一段代码,它会导致一个没完没了的循环,但只在某些情况下。

这是一个购物车数量的变化,目前,购物车正确工作时,改变最后一个项目的数量添加。但是,例如,如果手推车中有3项,则不能更改第1项或第2项的数量,因为循环无休止地运行。

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

代码如下所示:

代码语言:javascript
复制
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

如果我在会话上执行var_dump,当我向购物车添加了2项时,它将显示以下内容:

数组(2){ =>数组(2){ "item_id"=>字符串(11)“100-C09EJB 01”数量“=> string(1)”"3“} 1=>数组(2){ "item_id"=> string(11) "700-CF220EJ”"quantity"=> int(1) }

有人能帮帮我吗?

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 15:02:20

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

代码语言:javascript
复制
$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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16965385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档