Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php数组作为另一个数组中的值的目标路径?_Php_Arrays - Fatal编程技术网

如何使用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
作为函数参数传递,这样还可以避免显式创建副本。