我试图在PHP中使用$$语法来访问数组,我们可以将变量的名称放在另一个变量中并访问该变量。
我以前用不同的方式多次使用过这种语法,但令我惊讶的是,这并没有给我带来影响,并且浪费了很多时间。
以下是复制问题的示例代码:
$test=array(
'a'=>array(array(1,2,3),array(4,5,6),array(7,8,9))
);
$var = 'test';
var_dump($$var);
var_dump($$var['a']);
行var_dump($$var)
按预期工作,但我收到警告:非法字符串偏移' a'在第var_dump($$var['a']);
行,var_dump只打印null
为什么这不起作用?我在这做错了什么? 如果数组不支持该语法,是否有任何解决方法?
答案 0 :(得分:4)
您的$$var['a']
相当于${$var['a']}
。不是${$var}['a']
。后者是您正在寻找的解决方法语法。
引用PHP Manual on Variable Variables:
为了将变量变量与数组一起使用,您必须解决模糊问题。也就是说,如果您编写
$$a[1]
,则解析器需要知道您是否打算将$a[1]
用作变量,或者您希望$$a
作为变量然后[1]
来自该变量的索引。解决这种歧义的语法是:第一种情况为${$a[1]}
,第二种情况为${$a}[1]
。