php:使用字符串变量动态访问数组
是这样的 我有一个包含数组索引的变量,例如php:使用字符串变量动态访问数组,php,arrays,eval,Php,Arrays,Eval,是这样的 我有一个包含数组索引的变量,例如 $var = 'testVar["abc"][0]'; 或 或者它可以是运行时的任何东西 现在,当我尝试使用以下php代码访问此文件时: echo $$var; 或 我收到一条警告说在测线处偏移量非法 但是如果我使用这个代码,它是有效的 eval('echo $'.$var); 我不想使用eval()。还有别的办法吗 编辑: 变量$testVar是在运行时构建的数组,它可以动态构建多维数组。它的格式不是固定的,只有脚本通过使用某些变量知道数组可能
$var = 'testVar["abc"][0]';
或
或者它可以是运行时的任何东西
现在,当我尝试使用以下php代码访问此文件时:
echo $$var;
或
我收到一条警告说在测线处偏移量非法
但是如果我使用这个代码,它是有效的
eval('echo $'.$var);
我不想使用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"];
根据,您试图实现的目标是不可能的:
为了在数组中使用变量,必须解决歧义问题。也就是说,如果您编写$$a[1]
,那么解析器需要知道您是想使用$a[1]
作为变量,还是希望$$a
作为变量,然后从该变量中获取[1]
索引。解决这种歧义的语法是:${$a[1]}
用于第一种情况,而${$a}[1]
用于第二种情况
在您的情况下,$$var
尝试读取名为testVar[“xyz”][0][“abc”]
的变量,而不为数组编制索引。您可以这样取消对该数组的引用:
$a = "testVar";
echo ${$a}["xyz"][0]["abc"];
您可以
var\u dump
那个$testVar
变量吗?您使用的是哪个版本的php?确切的警告是什么?你能var\u dump
那个$testVar
变量吗?你使用的是哪个版本的php?警告到底是什么?进一步的解决方案:实际上我不能使用您在上面代码中提到的方法,即$a=“testVar”;echo${$a}[“xyz”][0][“abc”]代码>因为在运行时未知的实际部分是[“xyz”][0][“abc”]
,所以它可以是运行时的任何部分runtime@ImranAhmed我建议你重新考虑你的软件设计。如果你依赖这样的变量,我认为你应该用不同的方式设计它。如果这是不可能的(遗留代码、时间限制等),您将被困于eval
。进一步的解决方案:实际上,我不能使用您在上述代码中提到的方法,即$a=“testVar”;echo${$a}[“xyz”][0][“abc”]代码>因为在运行时未知的实际部分是[“xyz”][0][“abc”]
,所以它可以是运行时的任何部分runtime@ImranAhmed我建议你重新考虑你的软件设计。如果你依赖这样的变量,我认为你应该用不同的方式设计它。如果这是不可能的(遗留代码、时间限制等),您将被困于eval
。
$a = "testVar";
echo ${$a}["xyz"][0]["abc"];