我正在使用会话数组将产品存储在购物车中。
如果所选产品已经在购物车中,而不是再次添加产品,我想显示一条消息,通知用户该产品已经添加。
我尝试遍历数组以找到匹配的键。我也尝试过in_array($ var1,$ var2)函数。有了这些,状态就会告诉用户他们的产品已经在购物车中,但仍会添加产品。
我最后尝试的方法是使用array_search函数检查密钥是否存在,但是无论如何产品仍会添加到购物车中。
if(isset($_GET['productID']) && $_GET['productID'] != "") {
$product = $_GET['productID'];
$product = (string)$product;
$result_product = GetSpecificProduct($product);
if(!empty($result_product)) {
$cart_array[$result_product['ProductID']] = array(
'ProductID'=>$result_product['ProductID'],
'ProductName'=>$result_product['ProductName'],
'Price'=>$result_product['Price'],
'Specifications'=>$result_product['Specifications'],
'CO'=>$result_product['CO'],
'CatID'=>$result_product['CatID'],
'Name'=>$result_product['Name'],
'Quantity'=>1
);
}
if(empty($_SESSION['tocoto_cart'])){
$_SESSION['tocoto_cart'] = $cart_array;
$status = $result_product['ProductName']." added to your cart.";
}else if(!empty($_SESSION['tocoto_cart'])) {
$key = array_search($result_product['ProductID'],$_SESSION['tocoto_cart']);
if($key !== false) {
$status = "Selected product is already in your cart.";
} else {
$status = $result_product['ProductName'] . " added to your cart.";
$_SESSION['tocoto_cart'] = array_merge($_SESSION['tocoto_cart'],$cart_array );
}
答案 0 :(得分:1)
尝试做这样的事情
$array = $_SESSION['tocoto_cart'];
$key = array_search($result_product['ProductID'], array_column($array, 'ProductID'));
if($key !== false) {
$status = "Selected product is already in your cart.";
} else {
$status = $result_product['ProductName'] . " added to your cart.";
$_SESSION['tocoto_cart'] = array_merge( $_SESSION['tocoto_cart'], $cart_array );
}
答案 1 :(得分:0)
在会话中存储购物车项目的错误方法,因为当服务器(或php-fpm / apache进程)重新启动时,所有购物车都将与会话一起清除。
将购物车项目存储在数据库中,并确保该项目在单个购物车中是唯一的,请结合使用user_token
SQL对cart_id
,item_id
和ON DUPLICATE KEY UPDATE quantity = quantity + 1
的组合唯一约束
如果这对您来说太复杂了,请尝试修改这段代码
$key = array_search($result_product['ProductID'],$_SESSION['tocoto_cart']);
if($key !== false) {
到
if (array_key_exists($result_product['ProductID'],$_SESSION['tocoto_cart'])) {
$_SESSION['tocoto_cart'][$result_product['ProductID']]['Quantity'] += 1;
}