我有一段代码导致无限循环但仅在某些情况下。
这是购物车数量的变化,当更改最后添加的项目的数量时,购物车正常工作。但是,例如,如果我在购物车中有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)}}
有人能帮帮我吗?
提前谢谢你。
答案 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;