我只是想知道是否有人能告诉我这段代码无效的原因?
if($cart_count == 0)
{
$_SESSION['cart'][] = $tmp_product;
} else if($cart_count > 0) {
// if the array has anything in it:
for($i=0; $i<$cart_count; $i++)
{
// loop through the array rows:
// if the id of the product already is in there then add to it:
if($_SESSION['cart'][$i]['id'] === $tmp_product['id'])
{
// adds to the already there qty: preincrement actually I think
$_SESSION['cart'][$i]['qty'] += $tmp_product['qty'];
} else {
// otherwise add to it regardless of the conditional kind of...
$_SESSION['cart'][] = $tmp_product;
}
}
}
我的意思是我认为我的逻辑是正确的是有什么理由为什么当我把第一个产品添加到购物车然后我去添加更多产品时,它工作正常。
虽然当我转到另一个独特的产品而不是第一个添加的行时,为什么每次我去添加它会不断添加额外的行到会话?这真的很奇怪,我似乎无法理解它,确定这是我没看到的。
为了更好地理解这一点,我已经输出了一个不该做的例子:
Array
(
[cart] => Array
(
[0] => Array
(
[id] => 1
[name] => Product Test 1
[price] => 12.55
[qty] => 1
)
[1] => Array
(
[id] => 2
[name] => Product 2
[price] => 52.22
[qty] => 9
)
[2] => Array
(
[id] => 2
[name] => Product 2
[price] => 52.22
[qty] => 6
)
)
)
答案 0 :(得分:0)
if($cart_count > 0)
。如果从购物车中删除商品的逻辑是正确的,那么$ cart_count永远不会低于零。并且,如果一个案例是将$ cart_count与0进行比较,则只有一个案例留给else,这允许跳过上面的零比较。echo 'adding product';
来查看此调用的频率。也许你可以玩弄它并看看它是否有效。
if($cart_count === 0) { // no items in the cart
$_SESSION['cart'][] = $tmp_product; // add first item
} else {
// there are already items in the cart array
$product_already_there = false;
// if product is already in the cart, increase product quantity
for($i = 0; $i < $cart_count; $i++)
{
if($_SESSION['cart'][$i]['id'] === $tmp_product['id']) {
$_SESSION['cart'][$i]['qty'] = $_SESSION['cart'][$i]['qty'] + $tmp_product['qty'];
$product_already_there = true;
break;
}
}
// else add a new product to the cart
if($product_already_there === false) {
$_SESSION['cart'][] = $tmp_product;
}
}