Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php:使用字符串变量动态访问数组_Php_Arrays_Eval - Fatal编程技术网

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