任何方式来访问数组元素与变量连接

问题描述:

有无论如何访问数组“$ 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}; 

我试图$ {$一个$ B}和其他一些变化,有什么建议?

+0

这样做的原因是什么? – bestprogrammerintheworld 2013-04-09 19:55:08

+0

我需要在应用程序中使用它,但找到了另一种/更好的方法。但我仍然好奇。这是像未设置($ a。$ b); 只需使用&$ var作为参考,并以此方式完成即可。 – Jim 2013-04-09 20:06:00

您可以使用eval来实现此目的。不过请注意,有可能有更好的方法来做你的工作,并且对eval()的任何内容都应该很好地进行消毒。

eval("echo \$a$b;"); 
+0

谢谢,我想避免eval(),但谢谢你的答案。 – Jim 2013-04-09 20:04:29

不,没有像你想要的内置快捷方式。您可以尝试使用eval(),但我真的不推荐它

+0

怯懦downwoter头脑发言? – 2013-04-09 19:58:13

+0

+1这是一个合理的答案,为什么有人会投票? – Gavin 2013-04-09 20:18:16

你已经指出了eval()选项,并且我个人在适当的情况下并不是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无法控制,或者你正在使用它来描述可变深度的数组,你可以简化它的结构将类似于“一1.1”或“一个-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); 

在你的问题中所述您可以修改上述处理您的路径。