我正在为朋友构建一个简单的购物车,并在会话中使用数组来存储它。
要将商品添加到购物车,我有此代码
$next_item = sizeof($_SESSION['cart']) +1;
$_SESSION['cart'][$next_item] = array(item => $product_id, option => $option, qty => 1);
如果有人添加另一个相同的项目或更新购物车,我在如何更新此数组中的项目数量方面遇到了什么困难。谁能指出我正确的方向?感谢
答案 0 :(得分:2)
像
这样的东西foreach($_SESSION['cart'] as $key => $value) {
if ($_SESSION['cart'][$key]['item'] == $product_id) {
$_SESSION['cart'][$key]['qty'] += $qty_to_add;
}
}
我会更改数组的结构。
而不是
$_SESSION['cart'] = array(
1 => array(
'item' => 1,
'option' => 1,
'qty' => 1),
2 => array(
'item' => 2,
'option' => 1,
'qty' => 1),
3 => array(
'item' => 3,
'option' => 1,
'qty' => 1)
);
使用
$_SESSION['cart'] = array(
1 => array(
'option' => 1,
'qty' => 1),
2 => array(
'option' => 1,
'qty' => 1),
3 => array(
'option' => 1,
'qty' => 1)
);
密钥是产品ID的位置。它将使参考项更容易,您可以在一行中更新数量
$_SESSION['cart'][$product_id]['qty'] += $qty_to_add;
答案 1 :(得分:1)
如果订单不重要,您可以将产品存储在关联数组中。
if (isset($_SESSION['cart'][$product_id])) {
// set qty of $_SESSION['cart'][$product_id] + 1
} else {
// create $_SESSION['cart'][$product_id] with qty of 1
}
答案 2 :(得分:1)
首先,您不需要计算数组大小:
$_SESSION['cart'][] = array(...);
其次,我会使用$product_id
作为数组键。这样,搜索很简单:
if( isset($_SESSION['cart'][$product_id]) ){
$_SESSION['cart'][$product_id]['qty']++;
}else{
$_SESSION['cart'][$product_id] = array(
'option' => $option,
'qty' => 1,
);
}
答案 3 :(得分:1)
我不能说你为它选择了一个好的结构。如何对$ product_id进行索引呢?这样,您就可以随时知道购物车中是否已有特定商品:
<?php
if( isset($_SESSION['cart'][$product_id]) ) {
$_SESSION['cart'][$product_id]['qty'] += $new_qty;
} else {
$_SESSION['cart'][$product_id] = array(item => $product_id, option => $option, qty => 1);
}
?>
答案 4 :(得分:1)
要向购物车添加内容,只需使用此功能(假设产品ID是唯一的):
$_SESSION['cart'][$product_id] = array('item' => $product_id, 'option' => $option, 'qty' => 1);
要将任何给定产品ID的数量设置为5,请使用:
$_SESSION['cart'][$product_id]['qty'] = 5;
要将产品的数量增加3,请使用:
$_SESSION['cart'][$product_id]['qty'] += 3;