【问题标题】:how to change a session array variable value如何更改会话数组变量值
【发布时间】:2016-08-29 18:41:09
【问题描述】:

我的会话中有一组“产品”,产品是名称、代码和数量的数组,我想在按下“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)

【问题讨论】:

标签: php arrays session session-variables


【解决方案1】:

这个 $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
       }

    }
}

【讨论】:

    【解决方案2】:

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

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

    编辑你的代码 sn-ps 如下:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        $_SESSION["products"][product_code to update]["product_qty"]=new value
        

        【讨论】:

          【解决方案5】:

          您可以像下面这样更新会话值

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

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

          【讨论】:

          • 这是一个例子,你需要自己实现代码。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-30
          • 1970-01-01
          • 1970-01-01
          • 2016-09-16
          • 2023-03-21
          • 1970-01-01
          相关资源
          最近更新 更多