php - 产品在 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>";
}
}
?>
解决方案
// 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];
}
这可能会有所帮助!
推荐阅读
- python - 用逗号和 2 位小数打印,带填充
- javascript - 带for循环的乘法表1-10
- c - 在 c printf 中无效使用 void 表达式
- dart - 在 Visual Studio 代码中调试飞镖
- python - 分配变量=自我创建副本。需要它作为参考(指针)
- .htaccess - .htaccess 使用获取参数重写 url
- python - 如何在 HTML 中集成 Pyhon?
- apache-kafka - kafka 在单个事务中生成主题并写入状态存储
- php - Laravel 5.7 - 同一个项目中的多个子域和数据库
- azure - 在 Azure AKS 中运行 Docker Windows 容器时出现“与节点选择器不匹配”