我一直在努力为$_SESSION
的简单购物车找到解决方案。
我保持非常简单,这是我现在的代码
if ( Input::isPost('add') ) {
$id = Input::get('id');
$qta = Input::post('qta');
$size = Input::post('size');
if ( !isset($_SESSION['cart']) ) {
$_SESSION['cart'] = array();
}
if ( array_key_exists($id, $_SESSION['cart']) ) {
if ( $_SESSION['cart'][$id][0] == $size ) {
$_SESSION['cart'][$id][1]+=$qta;
} else {
$_SESSION['cart'][$id] = array( $size, $qta );
}
} else {
$_SESSION['cart'][$id] = array( $size, $qta );
}
}
那么,这段代码的作用是什么?
1)如果$_SESSION['cart']
不存在,请创建它,否则添加新项目。 2)当您向购物车添加商品时,您必须选择该商品的尺寸和数量。 3)如果购物车数组中已存在该商品,请检查尺寸是否相同,如果是,请更新数量。这是问题,如果项目已经存在(检查$_SESSION['cart'][$id]
)但是大小不同,请不要更新当前项目,而是创建新项目。问题是当前正在替换当前的一个,而不是2个具有相同id
但不同size
的产品,我只有最新的产品。
如果你能帮我解决,我会非常感激!
提前谢谢你。
答案 0 :(得分:1)
更好的方法是创建另一个名为sizes
的数组并在那里存储大小。所以你的代码看起来像
if (in_array($size, $_SESSION['cart'][$id]['sizes'])) {
//The size has been added to the cart
} else {
//The size isn't in the cart so add it
$_SESSION['cart'][$id]['sizes'][] = $size;
}
而不是存储数量
$_SESSION['cart'][$id][1]+=$qta;
为什么没有更多有意义的密钥,这样您就可以更好地理解数组的内容。例如
$_SESSION['cart'][$id]['qty']+=$qta;
答案 1 :(得分:1)
尝试将大小用作多维数组中额外维度的键。您当前的代码只允许每个项目有一个尺寸。
你最终会得到类似的东西:
if ( Input::isPost('add') ) {
$id = Input::get('id');
$qta = Input::post('qta');
$size = Input::post('size');
if ( !isset($_SESSION['cart']) ) {
$_SESSION['cart'] = array();
}
if ( array_key_exists($_SESSION['cart'][$id][$size]) ) {
$_SESSION['cart'][$id][$size] += $qta;
} else {
$_SESSION['cart'][$id][$size] = $qta;
}
}
答案 2 :(得分:1)
问题在于:
if ( $_SESSION['cart'][$id][0] == $size ) {
$_SESSION['cart'][$id][1]+=$qta;
} else {
$_SESSION['cart'][$id] = array( $size, $qta );
}
如果大小不同,则用新数组(bloc的else
)替换它。
那是你的阵列:
Array(
'cart'=>array(
'id'=>array('size', 'qta')
)
)
使用这种结构,你只能有一个id的大小,所以如果你想添加另一个而不是替换旧的,你应该考虑使用它:
Array(
'cart'=>array(
'id'=>array(0=>array('size1'=>'qta1'), 1=>array('size2'=>'qta2'))
)
)
当然,这意味着你需要遍历数组以找到合适的大小,然后更新qta。不好玩。
使用此结构可能更有趣:
Array(
'cart'=>array(
'id'=>array('size1'=>'qta1', 'size2'=>'qta2')
)
)
因此,您只需检查$_SESSION['cart'][$id][0] == $size
是否存在(使用array_key_exists)而不是检查$_SESSION['cart'][$id][$size]
,然后继续:)
答案 3 :(得分:0)
$postedQuantity = intval($_POST['quantity']);
$postedProduct = $_POST['product'];
$postedSize = $_POST['size'];
$productId = $_POST['product'] . $_POST['size'];// concat the product name/Id and //the size form a new array-key.it will be unique.
if(empty($_SESSION)){
$_SESSION['cart_items'] = array();
}
if(empty($_SESSION['cart_items'])) {
$_SESSION['cart_items'][$productId] = array('name'=> $_POST['product'],
'quantity'=> intval($_POST['quantity']),
'size'=>$_POST['size'],
);
} elseif(!array_key_exists($productId,$_SESSION['cart_items'])) {
$_SESSION['cart_items'][$productId] = array('name'=> $_POST['product'],
'quantity'=> intval($_POST['quantity']),
'size'=>$_POST['size'],
);
}
else {
$_SESSION['cart_items'][$productId]['quantity'] += $postedQuantity;
}