我想通过使用一个单独的数组作为路径来访问一个特定数组的属性。问题是所讨论的属性可能在任何深度。这里有一个例子…
我有数据的关联数组:
$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];