1

我一直在为购物车编写 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']['itemId']['qty']= $_SESSION['cart']['itemId']['qty'] + $q;
                $max=count($_SESSION['cart']);
                echo "SECOND";
            }
            else
            {
                $_SESSION['cart']=array();
                $_SESSION['cart'][0]['itemId']=$pid;
                $_SESSION['cart'][0]['qty'] = $q;
                $max=count($_SESSION['cart']);
            }
    }

有什么建议么?

谢谢

4

3 回答 3

1

你太复杂了。

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

    // has the main 'cart' array been set up in session yet? If not, do it
    if (!array_key_exists('cart', $_SESSION) || !is_array($_SESSION['cart']))
        $_SESSION['cart']=array();

    // has this item been added to the cart yet? If not, do it (0 qty)
    if (!array_key_exists($pid, $_SESSION['cart'])) {
        $_SESSION['cart'][$pid] = array(
            'itemId'=>$pid,
            'qty'=>0
        );  
    }

    // add the requested quantity of items to the cart
    $_SESSION['cart'][$pid]['qty'] = $_SESSION['cart'][$pid]['qty'] + $q;
}

第一次使用此函数添加项目时,它将在会话数组中设置正确的条目。任何后续使用该函数来添加相同的项目都会增加qty密钥。当一切都说完了,你会得到这样的:

array(
    '54'=>array(
        'itemId'=>54,
        'qty'=>4
    ),
    '99'=>array(
        'itemId'=>99,
        'qty'=>2
    ),  
)

文档

于 2013-02-21T18:48:40.690 回答
0

您的功能可以简化为这样的东西..

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

        //if the cart is not defined, define it
        if (!is_array($_SESSION['cart'])) $_SESSION['cart']=array();

        //See if an arry item for the part number exists, or add it
        if (!$_SESSION['cart'][$pid]) 
            $_SESSION['cart'][$pid]=$q;
        else
            $_SESSION['cart'][$pid]+=$q;
    }

然后以后再读...

foreach($_SESSION['cart'] as $item=>$qty){
    echo $item.': '.$qty;
}

这种方法很好,因为如果您添加两次相同的项目,数量将加在一起

于 2013-02-21T18:47:45.837 回答
0

也许这对你有帮助。第二个索引应该是$max,不是'itemId'

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']= $_SESSION['cart'][$max]['qty'] + $q;
                $max=count($_SESSION['cart']);
                echo "SECOND";
            }
            else
            {
                $_SESSION['cart']=array();
                $_SESSION['cart'][0]['itemId']=$pid;
                $_SESSION['cart'][0]['qty'] = $q;
                $max=count($_SESSION['cart']);
            }
    }
于 2013-02-21T18:48:41.453 回答