如何更改会话数组变量值

时间:2016-05-04 10:58:28

标签: php arrays session session-variables

我有一系列产品'在我的会话中,产品是一个名称,代码和数量的数组,我想在我按下“qty_up”时更改数量。按钮:

我的PHP是这样的:

if ($_POST['qty_up']==''){
    foreach ($_SESSION["products"] as $key => $val)
    {
        if ($val["product_code"] == $_POST['code']) {
            $val["product_qty"] += 1;
        }
    }
}

这改变了$ val [" product_qty"]但不改变会话中的实际值

这是我的产品'会话中的数组:

array (size=1)
  'products' => 
    array (size=5)
      213453 => 
        array (size=5)
          'product_qty' => string '1' (length=1)
          'product_code' => string '213453' (length=6)
          'product_name' => string 'Kingfisher' (length=10)
          'product_price' => string '12.00' (length=5)
      48754 => 
        array (size=5)
          'product_qty' => string '1' (length=1)
          'product_code' => string '48754' (length=5)
          'product_name' => string 'Minute maid' (length=11)
          'product_price' => string '2.00' (length=4)
      '3545231ES0' => 
        array (size=5)
          'product_qty' => string '1' (length=1)
          'product_code' => string '3545231ES0' (length=10)
          'product_name' => string 'Jagurt' (length=6)
          'product_price' => string '1.00' (length=4)

5 个答案:

答案 0 :(得分:4)

这个$ val有什么需要?您可以直接更新会话值。

if ($_POST['qty_up']=='') {

   foreach ($_SESSION["products"] as $key => &$val) {

       if ($val["product_code"] == $_POST['code']) {
           //$val["product_qty"] += $val["product_qty"];
           $_SESSION["products"][$key]['product_qty'] +=  $val["product_qty"]; // Add this
       }

    }
}

答案 1 :(得分:2)

以通常的方式foreach($products as $value) foreach遍历$products并将每个元素分配给每个循环中的变量$ value,它是元素值的副本,因此在您的情况下更改{{1 }}不会更改$val

为了能够使用$_SESSION$value之前的循环中直接修改数组元素。在这种情况下,该值将通过引用分配。

编辑您的代码段,如下所示:

&

如果您感到困惑,请阅读php官方手册,它很好地解释了这种行为。 http://php.net/manual/en/control-structures.foreach.php

答案 2 :(得分:1)

您可以更新会话值,如下所示

if (isset($_SESSION['some_session_var'])) {
    $_SESSION['some_session_var'] = $udpated_value; //$udpated_value can you be your modified value.
}

此外,您首先需要从会话变量中获取值,执行添加计算然后更新它。

答案 3 :(得分:1)

您需要更新$_SESSION而不是本地更新,如果您想使用本地变量进行更新,则需要使用&作为值引用。

$_SESSION['products']["product_qty"] += $val["product_qty"];

答案 4 :(得分:1)

$_SESSION["products"][product_code to update]["product_qty"]=new value