2011-09-19 89 views
1

我有這個購物車購物車問題

function modifyCart($action, $id){ 

$kori = cart(); 
$exp = explode("|", $kori); 

for($i=0;$i<count($exp);$i++){ 
$pilk = explode("-", $exp[$i]); 
if($id == $pilk[0]){ 
    switch($action){ 
     case "increase": // lisätään määrää 
     break; 

     case "decrease": // vähennetään määrää 
     break; 

     case "remove": // poistetaan 
     unset($exp[$i]); 
    } 
} 
} 

$valmis = array_merge($exp, $pilk); 

$muuta = implode("|", $valmis); 

$_SESSION["cart"] = $muuta; 


} 

車存放像productno-qty|productno-qty 我怎麼能得到工作的功能..感謝幫助

+0

dont'護理括號{}他們沒有在這裏工作 – Olli

+3

什麼是$科裏和車(),和他們持什麼樣的陣列中的數據呢?從這段代碼中不清楚。 –

+2

這是什麼問題?什麼不行? –

回答

1

這是一個可怕的車。但是,如果僅停留在這條賽道上,你想這樣:

function modifyCart($action, $id){ 

$kori = cart(); 
$exp = explode("|", $kori); 

foreach ($key, $product in $exp) { 
    $tmp = explode('-', $product); 
    $productNo = $tmp[0]; 
    $productQty = $tmp[1]; 

    if ($id == $productNo) { 
     if ($action == 'remove') { 
      unset($exp[$key]); 
      return implode('|', $exp); 
     } else if ($action == 'increase') { 
      $productQty += 1; 
      $exp[$key] = $productNo . '-' $productQty; 
      return implode('|', $exp); 
     } else if ($action == 'decrease') { 
      $productQty -= 1; 
      if ($productQty == 0) { 
       unset($exp[$key]); 
      } else { 
       $exp[$key] = $productNo . '-' $productQty; 
      } 
      return implode('|', $exp); 
     } else { 
      // throw exception because unrecognized action 
     } 
    } 
    // handle case where named product was not in the cart here. 
    return implode('|', $exp); 
} 
+1

我給你的疑點利益,並假設您要添加的功能,你收不回趨向或重構:-)這裏 –

+0

同樣的問題別人的遺產代碼庫:爲什麼你認爲it's糟糕的方式製作購物車? – Olli

+0

@Olli它並不是一個壞車。只知道有很多邊緣情況來考慮,並確保所有的代碼處理所有的邊緣情況 - 通過定義觸摸底層數據結構(如餅乾是如何處理的)基本功能做得最好。然而,未來的編碼人員必須學習並始終遵守這些規則,以防止漏洞百出的錯誤。爲了避免重新發明輪子,請查看某種其他類型的序列化或json編碼,其中角色案例由其他人處理,未來的程序員可以查看邊緣案例的處理方式。 –