首页 > 解决方案 > 如何通过定义特定键来访问 php 中嵌套数组中的所有值?

问题描述

我正在创建一个路由应用程序并将结果作为 json 数组获取。将其转换为 php 数组后,我正确地获得了整个距离和整个持续时间。现在我也需要关键“腿”中的每个值的距离和持续时间,但我所做的一切都是为了获取数据不起作用。

数组的 json 输出如下所示:

array (
  'routes' => 
  array (
    0 => 
    array (
      'legs' => 
      array (
        0 => 
        array (
          'summary' => '',
          'weight' => 3741.9,
          'duration' => 2912.3, // This value is what i want access
          'steps' => 
          array (
          ),
          'distance' => 21603.1, // This value is what i want access
        ),
        1 => 
        array (
          'summary' => '',
          'weight' => 3642.1,
          'duration' => 2777.4, // This value is what i want access
          'steps' => 
          array (
          ),
          'distance' => 21611.8, // This value is what i want access
        ),
      ),
      'weight_name' => 'routability',
      'weight' => 7384,
      'duration' => 5689.700000000001, // This value i can acesss
      'distance' => 43214.899999999994, // This value i can acesss too
    ),
  ),
  'waypoints' => 
  array (
    0 => 
    array (
      'hint' => '',
      'distance' => 16.78277948979663, // This value is what i want access
      'name' => 'Weg',
      'location' => 
      array (
        0 => 11.4623,
        1 => 50.7126,
      ),
    ),
    1 => 
    array (
      'hint' => '',
      'distance' => 16.62835508134535,
      'name' => 'Weg',
      'location' => 
      array (
        0 => 12.6069,
        1 => 51.5398,
      ),
    ),
    2 => 
    array (
      'hint' => '',
      'distance' => 16.78277948979663,
      'name' => 'Weg',
      'location' => 
      array (
        0 => 12.343,
        1 => 51.576,
      ),
    ),
  ),
  'code' => 'Ok',
)

我通过以下代码得到整个距离(43214.8)和整个持续时间(5689.7):

foreach($res2['routes'] as $item) 
{
    $distances = array_push_assoc($distances, $item['distance'], $item['duration']);
}

为了获得距离和持续时间,我做了以下事情:

foreach($res2['routes']['legs'] as $item) 
{
    $durations = array_push_assoc($durations , "DUR", $item['duration']);
}

如何从“腿”中获取距离和持续时间?为什么不工作 $res2['routes']['legs']?

谢谢!

标签: phparraysmultidimensional-array

解决方案


请注意“legs”数组存在于“routes”数组的索引 0 中,因此在其上循环需要使用$res2['routes'][0]['legs'].

此外,请注意,array_push_assoc在循环中使用相同的硬编码密钥(如您的示例中的“DUR”)每次都会覆盖该密钥,因此您的数据会丢失 - 您最好将其更改为:

foreach($res2['routes'][0]['legs'] as $item) {
    $durations[] = $item['duration'];
}

推荐阅读