【问题标题】:How to add value to associative array that store in session?如何为存储在会话中的关联数组添加值?
【发布时间】:2018-03-13 08:42:05
【问题描述】:
include('session.php');

$productname = $_GET['productname'];
$productcode = $_GET['productcode'];    

$wishlist = array("$productname" => $productcode);      

$_SESSION["wishlist"] = $wishlist;

print_r($_SESSION["wishlist"]);

此代码设置为一个名为“wishlist”的会话的数组。
问题是会话正在被替换。如果它已经存在,我想添加到数组中。

那么我怎样才能用新数据更新我的数组。 我尝试了以下方法。

$productname = $_GET['productname'];
$productcode = $_GET['productcode'];
$lastsession = $_SESSION["wishlist"];

// CHECK IF SESSION IS EMPTY OR NOT
if(empty($lastsession)) {
    $wishlist = array("$productname" => $productcode);
} else {
    /*
        How Can I Update array ???      
    */
}

数组输出是这样的。它关联的不是数字索引。 我希望得到单个数组。不是数组中的数组。

[mobile] => iphone_2

谢谢。

【问题讨论】:

    标签: php arrays session session-variables


    【解决方案1】:

    简而言之,你可以这样做(如果我理解正确的话):

    $productname = $_GET['productname'];
    $productcode = $_GET['productcode'];
    $lastsession = $_SESSION["wishlist"];
    
    // CHECK IF SESSION IS EMPTY OR NOT
    if(empty($lastsession)) {
        $wishlist = array("$productname" => $productcode);
    } else {
        array_push($wishlist, array("$productname" => $productcode));
    }
    

    array_push 是一个将信息添加到数组末尾的函数。在本例中,我们使用它将产品数组添加到当前愿望清单中。

    另一种简单的解决方案是:

    // create a blank array if the session variable is not created
    // array_push requires an array to be passed as the first parameter
    $wishlist = isset($_SESSION["wishlist"]) ? $_SESSION["wishlist"] : array();
    //$wishlist = $_SESSION["wishlist"] ?? array(); // this is for PHP 7+
    array_push($wishlist, array("$productname" => $productcode));
    
    // you can then access each product as:
    $wishlist["mobile"];
    

    或者将上述代码 sn-p 中的第 5 行替换为以下内容:

    $wishlist[$productname] = $productcode;
    

    这将使您不必像第 3 行那样创建一个空数组。
    array_push 的优势在于您可以一次添加多个产品,例如:

    $products = [$productname1 => $productcode1, $productname2 => $productcode2];
    array_push($wishlist, $products);
    

    我注意到的一件事是您将会话设置为$lastsession 以及使用$wishlist。尝试保持重复变量不存在。

    【讨论】:

    • this link 会回答您的问题吗?它指出会话的默认最大大小为 128MB
    • array_push($wishlist, array("$productname" => $productcode));这将在数​​组中创建一个新数组。我只想添加值而不是数组,所以我有什么解决方案?
    • @JustCarty array_push 会生成多维数组(-;
    • 我真的不明白这个问题?您想要 $_SESSION 中的多个数组,即 $_SESSION["mobile"]?还是您希望愿望清单成为一个会话并在该会话中包含您的愿望清单项目?
    • @TarangPanchal 我的脚本做你想做的事,但以更简单的方式 (-;
    【解决方案2】:

    将会话中的愿望清单数据设置为变量,然后将新产品添加到此变量中。之后更新会话中的愿望清单数据。

    $productname = $_GET['productname'];
    $productcode = $_GET['productcode'];
    
    // do the same as: $wishlist = !empty($_SESSION["wishlist"]) ? $_SESSION["wishlist"] : [];
    $wishlist = $_SESSION["wishlist"] ?? [];
    
    $wishlist[$productname] = $productcode;
    $_SESSION["wishlist"] = $wishlist;
    
    print_r($_SESSION["wishlist"]);
    

    【讨论】:

    • $wishlist = $_SESSION["wishlist"] ?? [];你能不能描述一下这个。
    • 这是 PHP7 的新功能 Null coalescing operator (php.net/manual/en/…)
    【解决方案3】:
    $_SESSION["wishlist"] = array( 'product1' => 'product1 Name' );
    // Initial products in session
    
    $temp_session = $_SESSION["wishlist"];
    //store products in wishlist in temp variable
    
    $temp_session['mobile'] = 'iphone_2';
    // Add new product to temp variable
    
    $_SESSION["wishlist"] = $temp_session;
    //Update session
    
    print_r( $_SESSION["wishlist"] );
    

    【讨论】:

    • 当数据很大时,您不会认为这是一个漫长的过程。 ?
    • 是的,坚决不优化,只是想演示他如何更新会话数组
    • 为什么不只是$_SESSION["wishlist"]["mobile"] = "iphone_2"; 这实际上是您正在做的事情,但需要多个步骤。毕竟,$_SESSION 是一个多维数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多