如果已存在,PHP会不断向购物车添加新产品系列

时间:2014-10-03 11:52:41

标签: php arrays session

我只是想知道是否有人能告诉我这段代码无效的原因?

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
        )
    )
)

1 个答案:

答案 0 :(得分:0)

嗯,奇怪。我不知道我是否走在正确的轨道上,但我对您的代码做了一些更改。

  • 我删除了if($cart_count > 0)。如果从购物车中删除商品的逻辑是正确的,那么$ cart_count永远不会低于零。并且,如果一个案例是将$ cart_count与0进行比较,则只有一个案例留给else,这允许跳过上面的零比较。
  • 在for语句中:每次找不到某个项目(因为已经在卡片中),就会插入一个新项目。您可以通过在代码中添加echo 'adding product';来查看此调用的频率。
  • 我已将此更改为插入产品(如果已经存在),然后退出for循环。并添加了一个标志$ product_already_there。

也许你可以玩弄它并看看它是否有效。


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;
    }
}