我一直在努力购买购物车的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']);
}
}
有什么建议吗?
由于
答案 0 :(得分: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
),
)
文档
is_array
- http://php.net/manual/en/function.is-array.php array_key_exists
- http://php.net/manual/en/function.array-key-exists.php 答案 1 :(得分: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;
}
此方法很好,因为如果您将相同的项目添加两次,则数量将一起添加
答案 2 :(得分: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']);
}
}