我正在为朋友构建一个简单的购物车,并在会话中使用数组来存储它。
要将商品添加到购物车中,我有以下代码
$next_item = sizeof($_SESSION['cart']) +1;
$_SESSION['cart'][$next_item] = array(item => $product_id, option => $option, qty => 1);
我正在努力如何在这个数组中更新一个项目的数量,如果有人添加另一个相同的项目或更新购物车。有人能给我指个方向吗?由于
类似
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;
如果顺序不重要,您可以将产品存储在关联数组中。
if (isset($_SESSION['cart'][$product_id])) {
// set qty of $_SESSION['cart'][$product_id] + 1
} else {
// create $_SESSION['cart'][$product_id] with qty of 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,
);
}
我不能说你为它选择了一个好的结构。在$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);
}
?>
要向购物车添加东西,只需使用以下命令(假设产品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;