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

时间:2016-01-13 07:59:47

标签: php arrays eval

就像这样

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

$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

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"];