就像这样
我有一个变量,其中包含一个数组索引,例如
$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
根据文档,您想要完成的是不可能的:
为了将变量变量与数组一起使用,您必须解决模糊问题.也就是说,如果你编写,
$$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)