我正在开发一个php购物车,我试图让购物车更新商品的数量,而不是为同一商品创建新商品。但是,当输入已经在购物车中的产品时,我的foreach语句只会根据第一个数组值进行检查,然后为该产品创建一个新条目。
有人可以帮助我解决这个问题并弄清楚为什么它没有检查整个数组列表吗?
这是我的更新方法:
function CheckForExistingEntry($id, $setOf, $quantity) {
// if the product ID and the SET OF is equal in multiple products, update the quanity instead of making new records
foreach ($_SESSION['shopping_cart'] as $key => $product) {
if ($id == $product['product_id'] && $setOf == $product['setOf']) {
// Update Cart Value
$_SESSION['shopping_cart'][$key]['quantity'] += $quantity;
$_SESSION['shopping_cart'][$key]['price'] *= $_SESSION['shopping_cart'][$key]['quantity'];
break;
} else {
// Add New Cart Value
AddToCart($id, $setOf, $quantity);
break;
}
}
}
答案 0 :(得分:1)
break;
和if
都有else
,这意味着它会在第一次迭代后一直中断。
我们删除else
- 块,因为我们只是想继续下一个项目,如果找不到的话。
试试这个:(我已经评论了这些变化):
// Define a variable that holds the state.
$updated = false;
foreach ($_SESSION['shopping_cart'] as $key => $product) {
if ($id == $product['product_id'] && $setOf == $product['setOf']) {
// Update Cart Value
$_SESSION['shopping_cart'][$key]['quantity'] += $quantity;
$_SESSION['shopping_cart'][$key]['price'] *= $_SESSION['shopping_cart'][$key]['quantity'];
// Set updated as true and break the loop
$updated = true;
break;
}
}
if (!$updated) {
// We didn't update any items, add a new item instead
AddToCart($id, $setOf, $quantity);
}