PHP购物车中的多个项目

时间:2010-05-22 21:43:29

标签: php shopping-cart frequency

我正在用PHP制作购物车。要检查用户是否选择了多个产品,我将所有内容都放在一个数组中($ contents)。当我输出它时,我得到类似“14,14,14,11,10”的东西。我想要像“3 x 14,1 x 11,1 x 10”这样的东西。最简单的方法是什么?我真的不知道怎么做。

这是我的代码中最重要的部分。

    $_SESSION["cart"] = $cart;

    if ( $cart ) {
        $items = explode(',', $cart);
        $contents = array();
        $i = 0;
        foreach ( $items as $item ) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
            $i++;
        }

        $smarty->assign("amount",$i);


        echo '<pre>';
        print_r($contents);
        echo '</pre>';

提前致谢。

4 个答案:

答案 0 :(得分:5)

为什么不建立更强大的购物车实施?

考虑从这样的数据结构开始:

$cart = array(
  'lines'=>array(
     array('product_id'=>14,'qty'=>2),
     array('product_id'=>25,'qty'=>1)
   )
);

或类似的。

然后你可以创建一组在购物车结构上运作的功能:

function addToCart($cart, $product_id, $qty){
   foreach($cart['lines'] as $line){
     if ($line['product_id'] === $product_id){
       $line['qty']  += $qty;
       return;
     }
   }
   $cart['lines'][] = array('product_id'=>product_id, 'qty'=>$qty);
   return;
}

当然,你可以(也许应该)进一步将这个数据结构和函数组合成一组类。购物车是以面向对象的方式开始的好地方。

答案 1 :(得分:1)

内置的array_count_values功能可以完成这项任务。

E.g:

<?php
$items = array(14,14,14,11,10);
var_dump(array_count_values($items));
?>

输出:

array(3) {
  [14]=>
  int(3)
  [11]=>
  int(1)
  [10]=>
  int(1)
}

答案 2 :(得分:1)

使用多维数组将数据存储在更健壮的结构中,您将受益匪浅。

例如:

$_SESSION['cart'] = array(
  'lines'=>array(
     array('product_id'=>14,'quantity'=>2, 'item_name'=>'Denim Jeans'),
     ...
   )
);

然后,要将新商品添加到购物车,您只需执行以下操作:

$_SESSION['cart'][] = array('product_id'=45,'quantity'=>1, 'item_name'=>'Jumper');

答案 3 :(得分:0)

当您让用户添加项目时,您需要将其添加到数组中的正确位置。如果产品ID已存在于阵列中,则需要更新它。还要小心用户试图输入零或负数字!