2011-05-09 2 views
2

장바구니에 항목을 추가하는 PHP 함수를 만들려고합니다. 내가 원하는 것은 카트가있는 항목을 만들지 않으면 수량이 늘어난다면 그 항목이 이미 들어 있는지보기 위해 배열을 점검하는 것입니다.PHP 장바구니에 추가 문제

대신 아이템을 추가하는 것입니다. 처음에는 아이템이 추가됩니다 (아이템이 이미 증가한 경우).하지만 다른 아이템을 추가하면 새로운 아이템이 생성됩니다 쇼핑 바구니에 항목 예를 들어

항목 1 - 수량은 4 항목 2 - 수량 1 개 항목 2 - 수량 1 개 항목 2 - 수량 1 ... 등등 ... 아래

은이다 내가 지금까지 가지고있는 코드?

function add_item ($id, $qty) 
    { 
     $count=$this->countItems; 
     echo "uytfdgghjkl;kj<br>"; 
     $added = false; 
     if($count>0) 
     { 
      $i=0; 
      while($added == false) 
      { 
       echo "fghjkl<br>"; 
       $tid = $this->items[$i]->getId(); 
       echo "new ID: ".$tid."<br>"; 
       echo "old ID: ".$id."<br>"; 
       echo $i; 
       if($tid == $id) 
       { 
        $amount = $this->items[$i]->getQty(); 
        $this->items[$i]->setQty($amount+1); 
        $added = true; 
        //$i++; 
        //break; 
       } 
       if($added == true) 
       { 
        break; 
       } 
       else //if($added == false) 
       { 
        $this->items[$this->countItems] = new OrderItem($id, $qty); 
        //$this->total = $total+ ($qty *$price); 
        $this->countItems++; 
        $added = true; 
        //break; 
       } 
       //else break; 
       $i++; 
      } 

     } 
     else 
     { 
      $this->items[$this->countItems] = new OrderItem($id, $qty); 
      //$this->total = $total+ ($qty *$price); 
      $this->countItems++; 
     } 
    } 
+0

이 코드에는 많은 문제가 있습니다. 그러나 처음에는 중복을 확인할 필요가 없습니다. SKU를 인덱스 키로 사용하는 것이 자명하지 않은 경우 알고리즘 학습 및 구현에 더 많은 시간을 할애해야합니다. – symcbean

답변

0

문제는 전체 배열을 먼저 검색하여 항목이 있는지 확인하지 않는 것입니다. 아래의 코드는 작동해야하지만 오타 또는 다른 것을 만들었을 수 있으므로 다시 확인해야합니다.

function add_item ($id, $qty) 
    { 
     $count=$this->countItems; 
     echo "uytfdgghjkl;kj<br>"; 
     $added = false; 
     if($count>0) 
     { 
      for($i=0; $i < $count; $i++) 
      { 
       echo "fghjkl<br>"; 
       $tid = $this->items[$i]->getId(); 
       echo "new ID: ".$tid."<br>"; 
       echo "old ID: ".$id."<br>"; 
       echo $i; 
       if($tid == $id) 
       { 
        $amount = $this->items[$i]->getQty(); 
        $this->items[$i]->setQty($amount+1); 
        $added = true; 
        break; 
       } 
      } 

     } 
     if(!$added) 
     { 
      $this->items[$this->countItems] = new OrderItem($id, $qty); 
      //$this->total = $total+ ($qty *$price); 
      $this->countItems++; 
     } 
    } 

더 좋은 옵션은 사전

예를 사용하는 것입니다.

if(isset($arr[$id])){ 
    ... 
} 
0

논리는 결함이 : 항목을 사용하여 어레이에있는 경우

$arr = array(); 
$arr['item_id'] = new OrderItem(...); 

그럼 당신은 확인할 수 있습니다. 코드는 장바구니의 첫 번째 항목 일 경우에만 항목의 수량을 증가시킵니다. 그렇지 않으면 항목이 추가됩니다. 여기 입증 :

if($added == true) // if this cart item's quantity was incremented 
{ 
    break; 
} 
else // add item 
{ 
    $this->items[$this->countItems] = new OrderItem($id, $qty); 
    // etc... 
} 

을 대신 루프에서 new OrderItem($id, $qty)을 제거하고 모든 카트 항목을 통해 반복 후 $added의 값을 확인해야합니다. 이 작업을 수행하려면을 사용하여 for (잠시 대신)을 통해 반복해야합니다.

관련 문제