我有一段代码,它会导致一个没完没了的循环,但只在某些情况下。
这是一个购物车数量的变化,目前,购物车正确工作时,改变最后一个项目的数量添加。但是,例如,如果手推车中有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如果我在会话上执行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) }
有人能帮帮我吗?
提前谢谢你。
发布于 2013-06-06 15:02:20
问题是,在遍历数组时,您正在修改它。一个非常简单的解决方案是修改数组的副本,然后在循环完成后替换原始的。
$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;https://stackoverflow.com/questions/16965385
复制相似问题