php:使用字符串变量动态访问数组

Imr*_*med 0 php arrays eval

就像这样

我有一个变量,其中包含一个数组索引,例如

$var = 'testVar["abc"][0]';
Run Code Online (Sandbox Code Playgroud)

要么

$var = 'testVar["xyz"][0]["abc"]';
Run Code Online (Sandbox Code Playgroud)

或者它可以是运行时的任何东西.

现在当我尝试使用这个PHP代码访问它时:

echo $$var;
Run Code Online (Sandbox Code Playgroud)

要么

echo ${$var};
Run Code Online (Sandbox Code Playgroud)

我得到一个警告说非法抵消线...

但如果我使用这个代码,它的工作原理

eval('echo $'.$var);
Run Code Online (Sandbox Code Playgroud)

我不想使用eval().还有其他方法吗?

编辑:

变量$ testVar是在运行时构建的数组,它可以动态构建多维数组.它的格式不固定,只有脚本通过使用某些变量知道数组可能是什么.

例如,在任何时候,数组可能有一个$["xyz"][0]["abc"]我想动态访问的索引.

我的php版本是5.1

Bar*_*chs 5

根据文档,您想要完成的是不可能的:

为了将变量变量与数组一起使用,您必须解决模糊问题.也就是说,如果你编写,$$a[1]那么解析器需要知道你$a[1]是否想要$$a用作变量,或者你想要作为变量,然后是该变量的[1]索引.解决这种歧义的语法是:${$a[1]}第一种情况和${$a}[1]第二种情况.

在您的情况下,$$var尝试使用名称读取变量testVar["xyz"][0]["abc"],而不是索引数组.您可以取消引用该数组:

$a = "testVar";
echo ${$a}["xyz"][0]["abc"];
Run Code Online (Sandbox Code Playgroud)