我正在制作一个php购物车,您在其中添加产品,然后,订单详细信息(例如产品的名称,数量和价格)与订单总数一起显示在页面底部。我要这样做,以便当您添加已经添加到购物车的产品时,它可以堆叠数量。例如,如果您有一个价格为5美元且数量为1的红色杯子产品,然后再将其数量为2的产品再次添加到购物车中,则订单明细部分显示红色杯子,数量为3的价格15美元。我正在使用一个会话变量来存储购物车的产品及其详细信息。
这是创建会话的代码块,我知道我必须在else语句中写一些东西,但是我不知道如何获取购物车中元素的价格:
<?php
//session_unset();
//session_destroy();
if(isset($_POST["addtocart"])) {
//var_dump($_SESSION["cart"]);
$_SESSION["cos"] = array_values($_SESSION["cart"]);
if(isset($_SESSION["cart"])) {
$item_array_id=array_column($_SESSION["cart"],"id");
$item_array_cant=array_column($_SESSION["cart"],"cantitate");
if(!in_array($_POST["id"],$item_array_id)) {
$count=count($_SESSION["cart"]);
$item_array=array(
'id' => $_POST["id"],
'name' => $_POST["hidden_name"],
'price' => $_POST["hidden_price"],
'quantity' => $_POST["quantity"]
);
$_SESSION["cart"][$count]=$item_array;
}
**else**
{
}
} else {
$item_array=array(
'id' => $_POST["id"],
'name' => $_POST["hidden_name"],
'price' => $_POST["hidden_price"],
'quantity' => $_POST["quantity"]
);
$_SESSION["cart"][0]=$item_array;
}
}
if(isset($_GET['action'])){
if($_GET['action']=="delete"){
for($i=0;$i<count($_SESSION["cart"]);$i++) {
if($i==$_GET['id']) {
unset($_SESSION["cart"][$i]);
}
}
$_SESSION["cart"] = array_values($_SESSION["cart"]);
}
}
?>
答案 0 :(得分:0)
如果您将id用作购物车数组的键,那么找到重复项并添加到价格中将非常容易。
<?php
if(isset($_POST["addtocart"])) {
if(isset($_SESSION["cart"])) {
$cart = $_SESSION['cart']; // just make addressing the cart easier
if(!isset($cart[$_POST['id']]) ) {
$cart[$_POST['id']] = ['id' => $_POST["id"],
'name' => $_POST["hidden_name"],
'price' => $_POST["hidden_price"],
'quantity' => $_POST["quantity"]
];
} else {
// get current quantity from cart and add new quantity
$q = $cart[$_POST['id']]['quantity'] + $_POST["quantity"];
$cart[$_POST['id']]['quantity'] = $q;
$cart[$_POST['id']]['price'] = $q * $_POST["hidden_price"];
}
} else {
$_SESSION['cart'][$_POST['id']] = ['id' => $_POST["id"],
'name' => $_POST["hidden_name"],
'price' => $_POST["hidden_price"],
'quantity' => $_POST["quantity"]
];
}
}