合并PHP购物车中的值

时间:2013-02-19 21:33:50

标签: php cart shopping

我有以下问题。

我在PHP会话中存储购物车,然后加载它以显示购物车中的商品。

问题是,目前,我看到每个项目没有合并,这意味着如果在购物车中添加了2次项目,它将显示两次。

我如何通过itemId合并结果?

    if(is_array($_SESSION['cart']))
            {
    $max=count($_SESSION['cart']);
    for($i=0;$i<$max;$i++)
{
    $pid=$_SESSION['cart'][$i]['itemId'];
    $q=$_SESSION['cart'][$i]['qty'];
    if($q==0) continue;
    $query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
    $query2-> bindValue (':idItem',$pid);
    $query2->execute();
    $row2 = $query2->fetch(PDO::FETCH_ASSOC);
                    ?>
            <div class="checkoutItems">     
            <span class='itemNameChck'><?php echo $row2['name']; ?> </a></span>
            <span class="itemQtyChck"><?php echo $row2['price']; ?> </span>
            <span class="itemQtyChck"><?php echo $q; ?> </span>
            <span class="itemQtyChck"><?php $totalPerItem = $q * $row2['price']; echo $totalPerItem; ?> </span>
            </div>
            <?php 
            }
            }

以下是我将商品添加到购物车的方式:

function addtocart($pid,$q)
    {

        if($pid<1 or $q<1) return;
        if(is_array($_SESSION['cart']))
            {

                $max=count($_SESSION['cart']);
                $_SESSION['cart'][$max]['itemId']=$pid;
                $_SESSION['cart'][$max]['qty']=$q;
                $max=count($_SESSION['cart']);
            }
            else
            {
                $_SESSION['cart']=array();
                $_SESSION['cart'][0]['itemId']=$pid;
                $_SESSION['cart'][0]['qty']=$q;
                $max=count($_SESSION['cart']);

            }
        //}
    }

由于

2 个答案:

答案 0 :(得分:3)

在我看来 - 你必须摆脱包含购物车商品索引的ID。

//             I mean this
//                 ||
//                 ||
//                \  /
//                 \/
$_SESSION['cart'][$max]['qty']=$q;

只需将itemId放在那里,然后在添加项目之前 - 检查是否已设置此数组元素。

您编写了此代码,每次都会向阵列添加新元素,现在您想要合并。这对我来说毫无意义。只在必要时添加新元素。否则,只需更新数量。

在我看来,你的购物车应该是这样的:

$_SESSION['cart'][$itemid]['qty']=$q;

// example how to store other attributes
$_SESSION['cart'][$itemid]['name']="Rubber duck";
$_SESSION['cart'][$itemid]['color']="Yellow";
$_SESSION['cart'][$itemid]['size']="XXL";
$_SESSION['cart'][$itemid]['price']="1000";

然后,在添加项目时,您可以检查带有该itemid的购物车项目是否包含任何元素。

if isarray($_SESSION['cart'][$itemid]) // when exists - add to previous quantity
    $_SESSION['cart'][$itemid]['qty']= $_SESSION['cart'][$itemid]['qty'] + $q;
else                                   // else - set quantity
    $_SESSION['cart'][$itemid]['qty'] = $q;

这只是一个草案/想法,但我希望它会对你有帮助。

答案 1 :(得分:0)

这样的事情可以解决问题

function addtocart($pid,$q)
{
if($pid<1 or $q<1) return;

for($i=0;$i> count($_SESSION['cart']);$i++)
{
    if($_SESSION['cart'][$i]["item_id"] == $pid)
    {   
        $_SESSION['cart'][$i]['qty'] += $q
        return;
    }
}


if(is_array($_SESSION['cart']))
{

    $max=count($_SESSION['cart']);
    $_SESSION['cart'][$max]['itemId']=$pid;
    $_SESSION['cart'][$max]['qty']=$q;
    $max=count($_SESSION['cart']);
}
else
{
    $_SESSION['cart']=array();
    $_SESSION['cart'][0]['itemId']=$pid;
    $_SESSION['cart'][0]['qty']=$q;
    $max=count($_SESSION['cart']);

}

}