2014-04-06 84 views
0

我目前正在努力創建購物車。 它在我將數組存儲到產品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

我想我們可以放心地假設某個ID只需要存儲一次,如果添加了另一個相同產品的數量,它可以與已經存在的數據合併。

因此,產品ID是足夠的數組密鑰,因爲它是唯一的。
然後可以將數量存儲爲產品的值。

那麼你車的存儲將表現爲

$_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) { 
    // ... 
} 
+0

謝謝。有用。 :) – George

2

您可以使用$_SESSION['cart']作爲鍵 - >值數組,其中關鍵是productID和價值是quantity

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

獲取密鑰數組使用array_keys。要在查詢中使用ids,請使用implode