如何更改会话数组变量值
how to change a session array variable value
我的会话中有一个 'products' 数组,一个产品是一个包含名称、代码和数量的数组,我想在按下 '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"] 但不会更改会话中的实际值
这是我在会话中的 'products' 数组:
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)
您可以像下面这样更新会话值
if (isset($_SESSION['some_session_var'])) {
$_SESSION['some_session_var'] = $udpated_value; //$udpated_value can you be your modified value.
}
此外,您首先需要从会话变量中获取值,执行添加计算,然后更新它。
你需要更新 $_SESSION
而不是本地变量,如果你想使用本地变量更新你需要使用 &
,它是按值引用的。
$_SESSION['products']["product_qty"] += $val["product_qty"];
以通常的方式 foreach($products as $value)
foreach
遍历 $products
并在每个循环中将每个元素分配给变量 $value,它是元素值的副本,因此在您的情况下更改 $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
这个$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
}
}
}
$_SESSION["products"][product_code to update]["product_qty"]=new value
我的会话中有一个 'products' 数组,一个产品是一个包含名称、代码和数量的数组,我想在按下 '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"] 但不会更改会话中的实际值
这是我在会话中的 'products' 数组:
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)
您可以像下面这样更新会话值
if (isset($_SESSION['some_session_var'])) {
$_SESSION['some_session_var'] = $udpated_value; //$udpated_value can you be your modified value.
}
此外,您首先需要从会话变量中获取值,执行添加计算,然后更新它。
你需要更新 $_SESSION
而不是本地变量,如果你想使用本地变量更新你需要使用 &
,它是按值引用的。
$_SESSION['products']["product_qty"] += $val["product_qty"];
以通常的方式 foreach($products as $value)
foreach
遍历 $products
并在每个循环中将每个元素分配给变量 $value,它是元素值的副本,因此在您的情况下更改 $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
这个$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
}
}
}
$_SESSION["products"][product_code to update]["product_qty"]=new value