如何使用php数组作为路径,以另一个数组中的值为目标


How can I use a php array as a path to target a value in another array?

我想通过使用一个单独的数组作为路径来访问一个特定数组的属性。问题是所讨论的属性可能在任何深度。这里有一个例子…

我有数据的关联数组:

$data = array(
    '1' => 'somethings_value',
    '2' => 'another_value',
    '3' => array(
        '1' => 'deeper_value',
    ),
);

现在我想访问这些值中的一个,但是使用另一个数组来指定它们的路径(通过键)。假设我有一个这样的路径数组:

$path = array('3', '1');

使用$path数组,我想获得值$data[3][1](这将是字符串'deeper_value')。

问题是要访问的值可以在任何深度,例如,我也可以得到这样的路径数组:

$path = array('1');

将得到字符串值'somethings_value'。我希望问题现在已经解决了。

那么问题是,我如何以某种方式循环遍历这个路径数组,以便使用它的值作为键来定位目标数组中的值?

谢谢!

编辑:可能值得注意的是,为了便于阅读,我使用了数字(尽管在引号中)作为数据数组的键,但我实际问题中的键实际上是字符串。

一个简单的循环就可以了:

更新:sorry did check my code

foreach($path as $id) 
{
    $data = $data[$id];
}
echo $data;
结果:

deeper_value

这将覆盖$data数组,所以你可能想先复制$data,就像David在他的例子中做的那样。

这不是最好的代码,但应该可以工作:

function getValue($pathArray, $data)
{
   $p = $data;
   foreach ($pathArray as $i)
   {
     $p = $p[$i];
   }
   return $p;
}

这里有一个不同的方法:

while($d = array_shift($path))
    $data = $data[$d];