以任何方式访问具有变量串联的数组元素

时间:2013-04-09 19:46:54

标签: php

无论如何,如果变量的字符串路径通过数组“$ 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}以及其他一些变体,有什么建议吗?

3 个答案:

答案 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;");