2016-05-04 25 views
0

我在我的会话中有一个产品阵列 产品是名称,代码和数量的阵营,我想在按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) 
+0

'$键=>&$ val'看到这个'&'? –

+0

哇,这是魔术,你可以把它放在答案,所以我可以投票吗?这是为什么? –

+0

请阅读说明书 - http://php.net/manual/en/control-structures.foreach.php –

回答

2

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

    } 
} 
+0

谢谢你的工作 –

1

您可以更新像下面

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

而且会话值,首先需要获取从会话变量的值,进行你的附加计算,然后更新它。

+0

这是一个例子,你需要实现你自己的代码。 –

1

你需要更新$_SESSION不是本地的,如果你想使用本地变量更新你需要使用&这是值的参考。

$_SESSION['products']["product_qty"] += $val["product_qty"]; 
1
用常规方法 foreach($products as $value) foreach穿行 $products和每一个元素变量$值在每个循环分配

,它的一个元素值的副本,所以你的情况变化$val不会改变$_SESSION

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

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

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

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