存储ID和数量的购物车

时间:2014-04-06 18:33:49

标签: php mysql

我目前正在尝试创建购物车。 它只在我存储到数组产品ID时有效,但我也需要存储数量。

我有一个功能

public static function addToCart($data) {
 if(!isset($_SESSION['cart'])) {
  $_SESSION['cart'] = array();
 }

 else {
  array_push($_SESSION['cart'], $data['id']);
 }
}

我还有一个从购物车中获取物品的功能

public static function getCart() {
 if(count($_SESSION['cart'])>0) { 
  $ids = "";

  foreach($_SESSION['cart'] as $id) {
   $ids = $ids . $id . ",";
  } 

  $ids = rtrim($ids, ',');

  $q = dibi::fetchAll("SELECT * FROM eshop_products WHERE idProduct IN ({$ids})");
  return $q;
 } else {

 }
}

然后我将函数赋值给变量并使用foreach。

$cart = Cart::getCart();

foreach($cart as $c) {
 echo $c['price'];
}

我到处寻找,阅读多维数组,但似乎没有什么对我有用

2 个答案:

答案 0 :(得分:2)

您可以使用$_SESSION['cart']作为键 - >值数组,其中键为productID且值为quantity

$_SESSION['cart'] = array(5 => 1, 6 => 2);

要获取密钥数组,请使用array_keys。要在查询中使用ids,请使用implode

答案 1 :(得分:2)

我想我们可以安全地假设某个ID只需存储一次,如果添加了同一产品的其他数量,它可以与已存在的产品合并。

因此,产品ID足以作为数组 key ,因为它是唯一的 然后可以将数量存储为产品的值。

您的购物车存储空间将显示为

$_SESSION['cart'] = array(
    123 => 3 // Product 123 with quantity 3
    254 => 1 // Product 254 with quantity 1
);

要添加到购物车,这将有效:

public static function addToCart($item, $quantity) {
    if(!isset($_SESSION['cart'])) {
        $_SESSION['cart'] = array();
    }

    if(isset($_SESSION['cart'][$item])) {
        $_SESSION['cart'][$item] += $quantity;
    } else {
        $_SESSION['cart'][$item] = $quantity;
    }
}

要稍后检索购物车商品,您可以使用foreach的扩展形式:

foreach($_SESSION['cart'] as $id => $quantity) {
    // ...
}