如何使用php数组作为另一个数组中的值的目标路径?
我想通过使用单独的数组作为路径来访问特定数组的属性。问题是所讨论的财产可能在任何深度。这里有一个例子 我有关联的数据数组:如何使用php数组作为另一个数组中的值的目标路径?,php,arrays,Php,Arrays,我想通过使用单独的数组作为路径来访问特定数组的属性。问题是所讨论的财产可能在任何深度。这里有一个例子 我有关联的数据数组: $data = array( '1' => 'somethings_value', '2' => 'another_value', '3' => array( '1' => 'deeper_value', ), ); 现在我想访问这些值中的一个,但使用另一个数组来指定它们的路径(通过键)。假设我有
$data = array(
'1' => 'somethings_value',
'2' => 'another_value',
'3' => array(
'1' => 'deeper_value',
),
);
现在我想访问这些值中的一个,但使用另一个数组来指定它们的路径(通过键)。假设我有这样一个路径数组:
$path = array('3', '1');
$path = array('1');
使用该$path
数组,我希望获得值$data[3][1]
(这将是字符串'deepher\u value'
)
问题是要访问的值可能在任何深度,例如,我也可以得到如下路径数组:
$path = array('3', '1');
$path = array('1');
它将获得字符串值“somethings\u value”
。我希望问题现在清楚了
所以问题是,我如何循环这个路径数组,以便使用它的值作为键来定位目标数组中的值
谢谢
编辑:可能值得注意的是,为了便于阅读,我使用了数字(尽管带引号)作为数据数组的键,但我真正遇到的问题实际上是字符串。这不是最好的代码,但应该可以工作:
function getValue($pathArray, $data)
{
$p = $data;
foreach ($pathArray as $i)
{
$p = $p[$i];
}
return $p;
}
一个简单的循环应该可以工作:
function getValue($pathArray, $data)
{
$p = $data;
foreach ($pathArray as $i)
{
$p = $p[$i];
}
return $p;
}
更新:对不起,你检查了我的代码
foreach($path as $id)
{
$data = $data[$id];
}
echo $data;
结果:
deeper_value
这将覆盖
$data
数组,因此您可能需要像在他的示例中那样首先复制$data
。以下是一种不同的方法:
while($d = array_shift($path))
$data = $data[$d];
您将无法使用此方法访问
$data[3][1]
。我不确定我将要说什么,但您确定foreach
将始终以正确的顺序获取$id
?例如,在Java中就不是这样。@Oltarus:我确信php的数组总是有一个定义良好的顺序来表示每个方面,并且该顺序默认为插入顺序。。。但是我找不到推荐人@grossvogel好的,大鸟,只是检查一下!除非使用global
关键字,否则无法访问函数中的$data
。由于global
是lame,因此您应该将$data
作为函数参数传递,这样还可以避免显式创建副本。