2016-01-13 48 views
0

它是这样的php:使用字符串变量动态地访问数组

我有一个变量,其中有一个数组索引。

$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

你可以'var_dump'那个'$ testVar'变量吗? –

+0

您使用的是哪个版本的PHP?什么是警告? – borracciaBlu

回答

5

按照documentation,你正在试图完成是不可能的:

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

在你的情况下,$$var试图读取名称为testVar["xyz"][0]["abc"]的变量,而不是索引数组。你可以像这样解引用数组:

$a = "testVar"; 
echo ${$a}["xyz"][0]["abc"]; 
+0

更多解决方案:http://stackoverflow.com/questions/10466815/php-variable-variables-with-array-key和http://stackoverflow.com/questions/2036547/variable-variables-pointing-to-arrays-或嵌套对象 –

+0

其实我不能使用你在上面的代码中提到的方法,即'$ a =“testVar”; echo $ {$ a} [“xyz”] [0] [“abc”];'因为运行时未知的实际部分是'[“xyz”] [0] [“abc”]'做任何事情在运行时 –

+0

@ImranAhmed我建议你重新考虑你的软件设计。如果你依赖这样的变量变量,我认为你应该以不同的方式进行设计。如果这是不可能的(遗留代码,时间限制等),你就会陷入'eval'。 –