就像这样
我有一个变量,其中包含一个数组索引,例如
$var = 'testVar["abc"][0]';
或
$var = 'testVar["xyz"][0]["abc"]';
或者它可以是运行时的任何内容。
现在,当我尝试使用这个PHP代码访问它时:
echo $$var;
或
echo ${$var};
我收到一条警告,说明线上的非法抵消......
但如果我使用此代码,则可以使用
eval('echo $'.$var);
我不想使用eval()。还有其他办法吗?
编辑:
变量$ testVar是在运行时构建的数组,它可以动态构建多维数组。它的格式不固定,只有脚本通过使用某些变量知道数组可能是什么。
例如在任何时候,数组都可能有一个我想动态访问的索引$["xyz"][0]["abc"]
。
我的php版本是5.1
答案 0 :(得分:5)
根据documentation,你想要完成的是不可能的:
为了将变量变量与数组一起使用,您必须解决模糊问题。也就是说,如果您编写
$$a[1]
,则解析器需要知道您是否打算将$a[1]
用作变量,或者您希望$$a
作为变量然后[1]
来自该变量的索引。解决这种歧义的语法是:第一种情况为${$a[1]}
,第二种情况为${$a}[1]
。
在您的情况下,$$var
尝试读取名为testVar["xyz"][0]["abc"]
的变量,而不是索引数组。您可以取消引用该数组:
$a = "testVar";
echo ${$a}["xyz"][0]["abc"];