2012-09-17 53 views
0

我製作了一個系統,它包含一個基本的購物車。購物車是一個非常簡單的面向對象系統,一次添加1個項目。以下是將商品添加到購物車的功能。使用帶有OOP的多維數組的PHP

function add_item($itemid,$qty=1,$price = FALSE, $info = FALSE) 
{ 

    if($this->itemqtys[$itemid] > 0) 
      { // the item is already in the cart.. 
     // so we'll just increase the quantity 

     $this->itemqtys[$itemid] = $qty + $this->itemqtys[$itemid]; 
     $this->_update_total(); 
    } else { 
     $this->items[]=$itemid; 
     $this->itemqtys[$itemid] = $qty; 
     $this->itemprices[$itemid] = $price; 
     $this->iteminfo[$itemid] = $info; 
    } 
    $this->_update_total(); 
} 

與此問題是一些產品有變化(大小,顏色等),但是當它們以相同的順序選擇了不同的變型中,產品不正確添加 - 所有同一產品的屬於一種變化。

我認爲這將是一個想法,陣列中使用多維數組或陣列產生類似:

$this->iteminfo[$itemid][$var]; 

從產品獲取VAR是沒有問題的,只是即時通訊與如何掙扎將產品添加到購物車及其變體中,並且僅在再次添加變體時更新此產品/變體組合的數量。如果添加了不同的變體,它會將產品添加到購物車中的新條目中?

希望這是有道理的:/謝謝

回答

2

我建議使用單一維度(人)陣列,但不是用普通的舊整數和字符串填充它,放置在其內一個對象。這將會更加穩健,並且您可以輕鬆地循環以獲得所需的任何內容 - 以及能夠在未來進一步擴展對象。

像這樣的事情,甚至會工作:

class itemToBuy 
{ 
    public $itemID; 
    public $qty; 
    public $price; 
    public $info; 
    public $whoKnowsWhat; 
} 

class yourShoppingCart 
{ 
    function add_item($newItem) 
    { 
     $itemInserted==false; 
     $itemsInCart=count($this->itemqtys); 
     for($i=0;$i<$itemsInCart;$i++) 
     { 
      if($this->itemqtys[$i]->itemID==$newItem->itemID) 
      { 
       $this->itemqtys[$i]->qty+=$newItem->qty; 
       $itemInserted=true; 
      } 
     } 
     if(!itemInserted) 
     { 
      $this->itemqtys[]=$newItem; 
     } 
     $this->_update_total(); 
    } 
} 

然後,只需通過的itemToBuy對象實例,而不是您傳遞它此刻的陣列。

3

這似乎不是很OOP給我。您應該爲包含數量,價格,變化等的購物車項目創建一個類,然後將此類的對象添加到購物車對象中的物品數組中。

你的方法然後變成沿着這些路線的東西:

function add_item($itemid, $qty=1, $variation ="", $price = FALSE, $info = FALSE){ 

    // use itemid concatenated with variation 
    // to get a unique key for every item in your cart 
    if(array_key_exists($itemid . $variation, $this->items)){ 

     // the item is already in the cart.. 
     // so we'll just increase the quantity 
     $item = $this->items[$itemid]; 

     // this assumes a method in the Item class to add to the quantity 
     $item->addToQuantity($qty); 

     // put the updated item in the cart 
     $this->items[$itemid] = $item; 
    } else { 
     // create a new item object 
     $item = new Item(); 
     $item->setId($itemid); 
     $item->setQuantity($qty); 
     $item->setPrice($price); 
     $item->setInfo($info); 
     $item->setVariation($variation); 

     // add it to the items array using a unique key 
     $this->items[$itemid . $variation] = $item; 
    } 
    $this->_update_total(); 
} 
1

您可以在一個變化值的varaiable $this->itemqtys對於每個項目,然後你可以檢查如下:

<?php 
// add a extra $var for checking the variations 
function add_item($itemid,$qty=1,$price = FALSE, $info = FALSE, $var=FALSE) { 
    if(($this->itemqtys[$itemid] > 0) && ($this->itemqtys[$itemid]['var'] == $var)) { 
      // item already in cart, update 
    } else { 
      // add item to the cart, along with the variation. 
    } 
} 
?> 

希望這有助於。