PHP无止境循环
我有一段代码,它会导致一个无休止的循环,但只有在某些情况下 这是一个购物车数量的变化,目前购物车工作正常时,改变数量的最后一个项目添加。但是,例如,如果我的购物车中有3件物品,我无法更改第一件或第二件物品的数量,因为循环无休止地运行 我不确定这段代码出了什么问题,我发现了类似的问题,但没有解决办法 代码如下所示:PHP无止境循环,php,html,session,loops,Php,Html,Session,Loops,我有一段代码,它会导致一个无休止的循环,但只有在某些情况下 这是一个购物车数量的变化,目前购物车工作正常时,改变数量的最后一个项目添加。但是,例如,如果我的购物车中有3件物品,我无法更改第一件或第二件物品的数量,因为循环无休止地运行 我不确定这段代码出了什么问题,我发现了类似的问题,但没有解决办法 代码如下所示: foreach ($_SESSION["cart"] as $each_item) { $i++; while (list($key, $va
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个项目添加到购物车时在会话上执行var_转储,则会显示以下内容:
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)}
有人能帮我吗
提前谢谢。问题是在循环数组时修改数组。一个非常简单的解决方案是修改数组的副本,然后在循环完成后替换原始副本
$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;
问题是,您在对数组进行循环时正在修改它。一个非常简单的解决方案是修改数组的副本,然后在循环完成后替换原始副本
$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;
$\u SESSION[“cart”]
中有什么?您可以在您的问题中添加一个$\u SESSION
的变量转储吗?您在中使用每个($\u SESSION[“cart”…)
中的$\u SESSION[“cart”]
数组拼接($\u SESSION[“cart”…)
)!!!不要这样做@安德鲁斯:好的,我已经把这个问题包括进去了。(furas)…谢谢你的提醒,但我从在线教程中获得了这段代码,我不知道还有什么其他方法可以这样做$\u SESSION[“cart”]
?你能在你的问题中添加一个$\u SESSION
的变量转储吗?你可能重复使用$\u SESSION[“cart”]
在foreach($\u SESSION[“cart”…)
然后在$\u会话[“cart”]
阵列拼接($\u会话[“cart”])中更改元素。
!!!不要这样做@安德鲁斯:好的,我已经把这个问题包括进去了。(furas)…谢谢你的提醒,但我从网上的一个教程中得到了这段代码,我不知道还有什么其他方法可以做到这一点谢谢你Justin!!这已经解决了:-)我已经被困在这个问题上好几个小时了…非常感谢这$newcart=$\u SESSION[“cart”]代码>创建一个副本谢谢Justin!!这已经解决了:-)我已经被困在这个问题上好几个小时了…非常感谢这$newcart=$\u SESSION[“cart”]代码>创建一个副本