变量 具有数组元素值语法的变量

Variable Variables with array element values syntax

提问人:Dave Lovely 提问时间:6/5/2019 最后编辑:zbeeDave Lovely 更新时间:6/5/2019 访问量:100

问:

我想创建一个会话变量,但我希望会话变量名称是动态的。因此,我需要的是变量名称的正确语法,该变量名称为 $_SESSION 变量。

我尝试了下面的代码,该代码创建了一个变量变量名称并向其存储了一个值,它工作得很好。

$xvalue = $_SESSION['delivery_id'];
$delivery_string = 'this_delivery_id_' . $xvalue ;
$$delivery_string = $_SESSION['delivery_id'];
echo "Variable name:&nbsp;" . $delivery_string . "<br/>";
echo "Session Variable Value:&nbsp;" . $this_delivery_id_29 . "<br/>";

上面的代码与第 5 行的 29 相呼应;期望的结果。

因此,在研究变量变量时,我只是尝试将变量名称改为 $_SESSION 变量名称。

$value = $_SESSION['delivery_id'];
$xsession = "$_SESSION[\"" . $value . "\"]";  // this gives compilation error so dead stop. I also tried without the escapes and also a dead stop. I also tried escaping the [ and ] and got rid of the compilation error so the code runs but it does not give the desired result.
$$xsession = $_SESSION['delivery_id'];
echo "Variable name:&nbsp;" . $xsession . "<br/>";
echo "Session Variable Value:&nbsp;" . $_SESSION["delivery_id_29"] . "<br/>";

因此,代码的第 2 行是问题所在。

php 会话 变量

评论

0赞 Nigel Ren 6/5/2019
不完全确定你想做什么,但你可能需要逃离$"$_SESSION[\"" . $value . "\"]" - "\$_SESSION[\"" . $value . "\"]"
1赞 AbraCadaver 6/5/2019
这太可怕了,现在就放弃这个。只需按预期使用数组即可。
0赞 Dave Lovely 6/5/2019
在Woocommerce中,我允许用户在一个订单中购买多件商品。但每件商品可以属于不同的交货日期(产品在特定日期亲自交付)。所以我需要知道每件物品属于哪个交付。现在,我正在为商品设置一个会话变量,当商品进入购物路径时。然后,当订单完成时,我为订单项目创建post_metadata,但我设置的会话变量仅具有放入购物车的最后一件商品的交货值。因此,我需要变量会话变量名称才能保存post_metadata。
0赞 zbee 6/5/2019
另一种方法的一个示例是简单地将项目 ID 存储在日期嵌套中。例如,如果我订购了一件商品在某一天交付,我可能会生产 ,或者如果我有 3 件商品在两天内送达,我可能会: .这是一种没有 varvar 的简单方法,并且迭代起来更容易。$_SESSION['order_setup'] = ['2019-06-04' => ['foo-123']]$_SESSION['order_setup'] = ['2019-06-04' => ['foo-123'], '2019-06-05' => ['bar-987', 'baz-456']]
1赞 Dave Lovely 6/5/2019
非常感谢。我会试一试。

答:

0赞 zbee 6/5/2019 #1

问题来自尝试“太难”插入变量,如果您转义,您将留下字符串 ,这不是变量的有效名称 - 您正在尝试访问该变量,就好像它是这样定义的: .您要做的是获取该数组元素的值并在变量变量中使用该值,这需要通过引用它来完成。$_SESSION[$value]"$_SESSION[$value]"$$_SESSION[$value] = 'foo';

以下任何一种似乎都给出了你想要的结果;一个直变量变量:

$value = 'foo';
$_SESSION['foo'] = 'bar';
$bar = 'baz';

echo ${$_SESSION[$value]}; //prints baz

一个是另一个步骤,有助于使其更清晰:

$identifier = $_SESSION[$value];
echo $$identifier //prints baz

我不明白你会以这种方式存储什么,但你也可以研究替代方案,以实现更干净、更直接的方法。如果你澄清了你背后的用途,也许有人会提出一种替代方法。