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

时间:2019-06-04 19:08:09

标签: php session-variables variable-variables

我想创建一个会话变量,但是会话变量名称是动态的。因此,我需要的是变量名称(即$ _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/>";

所以代码的第二行就是问题所在。

1 个答案:

答案 0 :(得分:0)

问题出在试图对变量“有点太难”进行插值,如果您逃脱了$_SESSION[$value],则会留下字符串"$_SESSION[$value]",这不是变量的有效名称-您正在尝试访问变量,就像定义变量一样:$$_SESSION[$value] = 'foo';。您想要做的就是获取该数组元素的值,并在变量variable中使用它,这需要通过引用它来完成。

以下任何一种似乎都能给出您想要的结果;直接变量:

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

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

一个又一个步骤,有助于使其更加清晰:

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

我不知道您将以这种方式存储什么,但是您也可能会研究替代方案以实现更清洁,更直接的方法。如果您在此背后弄清楚用法,也许有人将可以建议一种替代方法。