首页 > 解决方案 > 产品在 php 数组中出现两次

问题描述

请我需要帮助,我正在为一家蛋糕店创建购物车功能。当我添加一个产品时,它可以工作,但如果我再次添加它,它会显示为第二个数组。我如何确保产品只添加一次。我使用了 in_array() 函数,但我似乎没有做对。

这是我的代码

 <?php

session_start();
if(isset($_POST['add_to_cart']))
{
    // if the cart isn't opened
    if(!isset($_SESSION['cart']))
    {
        $_SESSION['cart'][0]=array('cakename'=>$_POST['cakename'],'cakeprice'=>$_POST['cakeprice'],'Quantity'=>1); 
        
        echo "<script>
        alert('Item Added');
        window.location.href='index.php';
        </script>";
    }
    // If the product already exists in the shopping cart
    elseif(in_array($_POST['cake_name'],$_SESSION['cart']))
    {
            echo "<script>
            alert('Item ALREADY Added');
            window.location.href='index.php';
            </script>";
            
    }
    else
    {
        $count= count($_SESSION['cart']);

        $_SESSION['cart'][$count]= array('cakename'=>$_POST['cakename'],'cakeprice'=>$_POST['cakeprice'],'Quantity'=>1);       
        
        echo "<script>
        alert('Item Added');
        window.location.href='index.php';
        </script>";
    }         
}
?>

标签: phpshopping-cart

解决方案


// your session is a mutidimension array

// let session has the following values
$_SESSION['cart'] = [
    0 => ['cakename'=> 'cake1','cakeprice'=>'200.00', 'quantity'=>1],
    1 => ['cakename'=> 'cake2','cakeprice'=>'100.00', 'quantity'=>3],
    2 => ['cakename'=> 'cake3','cakeprice'=>'300.00', 'quantity'=>4]
];

// NOTE : I have skipped the validation / sanitizaion part of $_POST
$cakeName = $_POST['cakename'];
$cakePrice = $_POST['cakeprice'];

if(!isset($_SESSION['cart'])){
    $_SESSION['cart'] = [];
}
// empty array is false in <IF>
if($_SESSION['cart'] && ( $key = array_search($cakeName, array_column($_SESSION['cart'], 'cakename')) !== FALSE ){
    $_SESSION['cart'][$key]['quantity'] += 1;
} else {
    $_SESSION['cart'][] = ['cakename'=> $cakeName,'cakeprice'=>$cakePrice, 'quantity'=>1];
}

这可能会有所帮助!


推荐阅读