我目前正在尝试创建购物车。 它只在我存储到数组产品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'];
}
我到处寻找,阅读多维数组,但似乎没有什么对我有用
答案 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) {
// ...
}