У меня есть следующий вопрос.Консолидация значений из корзины 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']);
}
//}
}
Благодарности
При добавлении элемента в корзину, вы должны проверить, если она уже присутствует, и если да, то добавить количество для указанного элемента вместо добавление элемента. – legrandviking
Другим вариантом может быть индексирование их с помощью itemId, а не индекса ($ i). Таким образом, дубликаты невозможны. – adomnom
@legrandviking - просто добавлена функция, которая добавляет элемент. Я проверяю, существует ли массив ... – samyb8