【问题标题】:How can I use a php array as a path to target a value in another array?如何使用 php 数组作为路径来定位另一个数组中的值?
【发布时间】:2011-07-08 14:21:04
【问题描述】:

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

我有关联的数据数组:

$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'。我希望问题现在已经清楚了。

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

谢谢!

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

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    一个简单的循环应该可以工作:

    更新:抱歉检查了我的代码

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

    结果:

    deeper_value
    

    这将覆盖$data 数组,因此您可能需要先复制$data,就像David 在他的示例中所做的那样。

    【讨论】:

    • 您将无法使用此方法访问$data[3][1]
    • 我不确定我要说什么,但您确定foreach 将始终以正确的顺序使用$id 吗?例如,Java 中的情况并非如此。
    • @Oltarus:我确信 php 的数组总是有一个明确定义的顺序,foreach 尊重,并且顺序默认为插入顺序......但我找不到参考!
    • @grossvogel 好的,大鸟,正在检查!
    【解决方案2】:

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

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

    【讨论】:

    • 你不能在函数内部访问$data,除非你使用global关键字。由于global 很烂,您应该将$data 作为函数参数传递,这也使您不必显式创建副本。
    【解决方案3】:

    这是一种不同的方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多