Php 如何在会话类型数组中推拉变量

Php 如何在会话类型数组中推拉变量,php,arrays,session,Php,Arrays,Session,我愿意使用简单的PHP会话数组创建购物车。我试图搜索不同的StackOverFlow问题,但没有一个能给我问题的确切答案。也许我犯了什么愚蠢的错误。但是, 我正在这样做: <!-- SHOPPING CART --> <?php if(isset($_REQUEST['atc'])) { $item = $_REQUEST['atc']; $_SESSION['cart'] = array(); array_push($_SESSION['cart']

我愿意使用简单的PHP会话数组创建购物车。我试图搜索不同的StackOverFlow问题,但没有一个能给我问题的确切答案。也许我犯了什么愚蠢的错误。但是,

我正在这样做:

<!-- SHOPPING CART -->
<?php
if(isset($_REQUEST['atc']))
{
    $item = $_REQUEST['atc'];
    $_SESSION['cart'] = array();

    array_push($_SESSION['cart'], $item);
    //$_SESSION['cart'][] = $item;

     foreach($_SESSION["cart"] as $key => $val)
    { 
        echo $key . ">" . $val;
    }
}
?>
<!-- SHOPPING CART -->


当用户单击同一页面上的“添加到购物车”按钮时,我收到了
$\u请求['ate']
(整数值/产品ID)。然后我将值放入$item,然后我将
$\u会话['cart']
声明为数组。然后我尝试了
array\u push
,甚至尝试了
$\u SESSION['cart'][/code>来推送整数值。但是每次只更新第一个元素,因此
$\u SESSION['cart'][0]
存储的是值,而不是
$\u SESSION['cart'][1]
或其他元素。

问题在于每次都通过
$\u SESSION['cart']=array()将
$\u SESSION['cart']
重新定义为空数组然后只推一个元素

试试这个

if(isset($_REQUEST['atc']))
{
    $item = $_REQUEST['atc'];

    if (!isSet($_SESSION['cart']))
        $_SESSION['cart'] = array();

    array_push($_SESSION['cart'], $item);
    //$_SESSION['cart'][] = $item;

     foreach($_SESSION["cart"] as $key => $val)
    { 
        echo $key . ">" . $val;
    }
}
现在,只有当用户第一次想要添加项目时,
$\u会话['cart']
才会作为空数组启动。第二次(
$\u SESSION['cart']
已经是一个包含一个元素的数组),第二个元素将被正确推送


如果希望元素是唯一的(如注释中所述),可以使用元素id作为键(并且数组只能具有唯一键)


这将首先检查商品是否已在购物车中(
array\u key\u存在
),如果不存在,将添加该商品。如果是,它将增加值,因此您可以跟踪特定项目在购物车中的频率(如果您不需要该功能,只需丢失
else
语句)

您面临的问题是每次获得项目时都会覆盖$\u会话['cart']。试一试

 if(!isset($_SESSION['cart'])
    $_SESSION['cart'] = array();

    //array_push($_SESSION['cart'], $item);
    $_SESSION['cart'][] = $item;
首先检查会话是否不存在,然后添加项目


您是使用AJAX调用此文件还是如何管理“当用户单击时”?没有AJAX,只有简单的PHP。欢迎使用。如果这个(或DeBNNOOH)的答案对你有帮助,请考虑赞成和/或标记一个答案,就像肯定的,我会的。你能再给我一个解决方案吗?如何在数组中添加不同的元素。因此,产品是独一无二的。所以,如果访问者添加了多个相同的项目,那么数组中只会添加一个项目ID。您能再给我一个解决方案吗?如何在数组中添加不同的元素。因此,产品是独一无二的。因此,如果访问者添加了多个相同的项,那么只有一个项ID会添加到数组中。
 if(!isset($_SESSION['cart'])
    $_SESSION['cart'] = array();

    //array_push($_SESSION['cart'], $item);
    $_SESSION['cart'][] = $item;