无论如何,如果变量的字符串路径通过数组“$ a”,那么访问数组“$ a”吗?
例如:
$b = "['one']['1.1']";
$a = array(
'one' => array(
'1.1' => 'One point One',
'1.2' => 'One point Two',
),
'two' => array(
'2.1' => 'Two point One',
'2.2' => array(
'2.2.1' => 'Two point Two point One',
),
),
);
echo ${$a.$b};
我尝试过$ {$ a。$ b}以及其他一些变体,有什么建议吗?
答案 0 :(得分:2)
你指出了eval()选项,在个人情况下,我个人并不是一个评价者。
我只是想建议,或许有更好的方法可以处理你的问题。
现在我不明白变量$ b来自哪里,但如果你把它存储为2个变量,它似乎更有用,然后你可以直接使用它们来访问数组,比如为:
$b = 'one';
$c = '1.1';
$a = array(
'one' => array(
'1.1' => 'One point One',
'1.2' => 'One point Two',
),
'two' => array(
'2.1' => 'Two point One',
'2.2' => array(
'2.2.1' => 'Two point Two point One',
),
),
);
echo $a[$b][$c];
如果你无法控制变量$ b,或者你用它来描述一个变深度数组,你可以将它的结构简化为'one-1.1'或'one-two-1.1'并解析将变量放入您需要的索引中。
例如:
$b = 'one-1.1';
$a = array(
'one' => array(
'1.1' => 'One point One',
'1.2' => 'One point Two',
),
'two' => array(
'2.1' => 'Two point One',
'2.2' => array(
'2.2.1' => 'Two point Two point One',
),
),
);
function resolveArray($path, $array)
{
$indexes = explode('-', $path);
$depth = count($indexes);
$target = $array;
for($i = 0; $i < $depth; $i++)
{
$target = $target[$indexes[$i]];
}
return $target;
}
echo resolveArray($b, $a);
您可以修改上述内容以处理问题中描述的路径。
答案 1 :(得分:0)
没有。没有你想要的内置快捷方式。你可以尝试使用eval()
,但我真的不推荐它
答案 2 :(得分:0)
您可以使用eval
来实现此目的。但是,请注意,可能有更好的方法来做你正在做的事情,并且eval()
中的任何内容都应该被清理干净。
eval("echo \$a$b;");