2010-05-22 93 views
2

我正在使用PHP製作購物車。要檢查用戶是否選擇了多個產品,我將所有內容放入一個數組($ contents)中。當我輸出時,我會得到類似「14,14,14,11,10」的東西。我想要有「3 x 14,1 x 11,1 x 10」之類的東西。什麼是最簡單的方法來做到這一點?我真的不知道該怎麼做。PHP購物車中的多個項目

這是我的代碼中最重要的部分。

$_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>'; 

在此先感謝。

回答

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

內置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) 
} 
1

您將受益於使用多維數組存儲在一個更堅固的結構數據。

例如:

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

再到新的項目添加到購物車,你可以簡單地這樣做:

​​3210
0

當你讓用戶添加你需要將其添加在一個項目在陣列中的正確位置。如果產品ID已經存在於數組中,則需要更新它。還總是要小心用戶輸入零或負數!