如何在SESSION类型数组中推拉变量


How to Push and Pull Variable in SESSION type Array

我愿意使用简单的PHP SESSION ARRAY创建一个购物车。我试图搜索不同的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 -->

当用户在同一页面上单击"添加到购物车"按钮时,我收到$_REQUEST['ate'](整数值/产品ID)。然后我将值放入$item中,然后将$_SESSION['cart']声明为Array。然后我尝试了array_push,甚至尝试了$_SESSION['cart'][]来推送整数值。但每次只更新第一个元素,因此$_SESSION['cart'][0]存储的是值,而不是$_SESSION['cart'][1]或其他值。

问题是,每次通过$_SESSION['cart'] = array();$_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;
    }
}

现在,只有当用户第一次想要添加项目时,$_SESSION['cart']才会作为一个空的数组启动。第二次($_SESSION['cart']已经是一个有一个元素的数组),第二个元素将被正确地推送。


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

if(isset($_REQUEST['atc']))
{
    $item = $_REQUEST['atc'];
    if (!isSet($_SESSION['cart']))
        $_SESSION['cart'] = array();
    if (!array_key_exists($item, $_SESSION['cart']))
        $_SESSION['cart'][$item] = 1;
    else
        $_SESSION['cart'][$item]++;
    foreach($_SESSION["cart"] as $key => $val)
    { 
        echo $key . ">" . $val;
    }
}

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

您面临的问题是,每次获得项目时都会覆盖$_SESSION['cart']。尝试

 if(!isset($_SESSION['cart'])
    $_SESSION['cart'] = array();
    //array_push($_SESSION['cart'], $item);
    $_SESSION['cart'][] = $item;

首先检查会话是否不存在,然后添加项目。

注意:如果使用array_push()向数组中添加一个元素,那么最好使用$array[]=,因为这样就没有调用函数的开销。