2013-02-19 2 views
3

У меня есть следующий вопрос.Консолидация значений из корзины PHP

Я хранил корзину для покупок на сеансе PHP, а затем загружал ее, чтобы показать элементы в корзине.

Проблема в том, что в настоящее время я вижу каждый элемент без консолидации, то есть если элемент добавлен 2 раза в корзину, он будет показан дважды.

Как я могу консолидировать результаты по itemId?

if(is_array($_SESSION['cart'])) 
      { 
    $max=count($_SESSION['cart']); 
    for($i=0;$i<$max;$i++) 
{ 
    $pid=$_SESSION['cart'][$i]['itemId']; 
    $q=$_SESSION['cart'][$i]['qty']; 
    if($q==0) continue; 
    $query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem"); 
    $query2-> bindValue (':idItem',$pid); 
    $query2->execute(); 
    $row2 = $query2->fetch(PDO::FETCH_ASSOC); 
        ?> 
      <div class="checkoutItems">  
      <span class='itemNameChck'><?php echo $row2['name']; ?> </a></span> 
      <span class="itemQtyChck"><?php echo $row2['price']; ?> </span> 
      <span class="itemQtyChck"><?php echo $q; ?> </span> 
      <span class="itemQtyChck"><?php $totalPerItem = $q * $row2['price']; echo $totalPerItem; ?> </span> 
      </div> 
      <?php 
      } 
      } 

Вот как добавить элементы в корзину:

function addtocart($pid,$q) 
    { 

     if($pid<1 or $q<1) return; 
     if(is_array($_SESSION['cart'])) 
      { 

       $max=count($_SESSION['cart']); 
       $_SESSION['cart'][$max]['itemId']=$pid; 
       $_SESSION['cart'][$max]['qty']=$q; 
       $max=count($_SESSION['cart']); 
      } 
      else 
      { 
       $_SESSION['cart']=array(); 
       $_SESSION['cart'][0]['itemId']=$pid; 
       $_SESSION['cart'][0]['qty']=$q; 
       $max=count($_SESSION['cart']); 

      } 
     //} 
    } 

Благодарности

+1

При добавлении элемента в корзину, вы должны проверить, если она уже присутствует, и если да, то добавить количество для указанного элемента вместо добавление элемента. – legrandviking

+0

Другим вариантом может быть индексирование их с помощью itemId, а не индекса ($ i). Таким образом, дубликаты невозможны. – adomnom

+0

@legrandviking - просто добавлена ​​функция, которая добавляет элемент. Я проверяю, существует ли массив ... – samyb8

ответ

4

На мой взгляд - вы должны избавиться от этого ID, который содержит индекс телега элемента.

//    I mean this 
//     || 
//     || 
//    \/
//     \/ 
$_SESSION['cart'][$max]['qty']=$q; 

Просто поместите itemId там, и, прежде чем добавить товар - проверить, если этот элемент массива устанавливается.

Вы написали этот код, который добавляет новый элемент в массив каждый раз, и теперь вы хотите консолидировать его. Для меня это не имеет смысла. Добавьте новый элемент только тогда, когда вам нужно. В противном случае просто обновите количество.

На мой взгляд, ваша корзина должна выглядеть следующим образом:

$_SESSION['cart'][$itemid]['qty']=$q; 

// example how to store other attributes 
$_SESSION['cart'][$itemid]['name']="Rubber duck"; 
$_SESSION['cart'][$itemid]['color']="Yellow"; 
$_SESSION['cart'][$itemid]['size']="XXL"; 
$_SESSION['cart'][$itemid]['price']="1000"; 

Затем при добавлении элемента вы можете проверить, если корзина элемент с этим ItemID содержит какие-либо элементы.

if isarray($_SESSION['cart'][$itemid]) // when exists - add to previous quantity 
    $_SESSION['cart'][$itemid]['qty']= $_SESSION['cart'][$itemid]['qty'] + $q; 
else         // else - set quantity 
    $_SESSION['cart'][$itemid]['qty'] = $q; 

Это всего лишь проект/идея, но я надеюсь, что это поможет вам.

+0

Это будет хорошо работать – legrandviking

0

Что-то вроде этого следует сделать трюк

function addtocart($pid,$q) 
{ 
if($pid<1 or $q<1) return; 

for($i=0;$i> count($_SESSION['cart']);$i++) 
{ 
    if($_SESSION['cart'][$i]["item_id"] == $pid) 
    { 
     $_SESSION['cart'][$i]['qty'] += $q 
     return; 
    } 
} 


if(is_array($_SESSION['cart'])) 
{ 

    $max=count($_SESSION['cart']); 
    $_SESSION['cart'][$max]['itemId']=$pid; 
    $_SESSION['cart'][$max]['qty']=$q; 
    $max=count($_SESSION['cart']); 
} 
else 
{ 
    $_SESSION['cart']=array(); 
    $_SESSION['cart'][0]['itemId']=$pid; 
    $_SESSION['cart'][0]['qty']=$q; 
    $max=count($_SESSION['cart']); 

} 

}

Смежные вопросы