在PHP中遍历多维数组的问题

时间:2018-12-22 09:30:47

标签: php arrays multidimensional-array foreach

在Laravel应用程序上工作,我在其中使用了API中的一些数据。我将响应作为JSON对象获取并转换为数组。它表现为复杂的多维数组 (嵌套数组)。我试图使用嵌套的foreach遍历它,以便到达每个项目的ID,但是我一直失败。.

响应存储在名为usmDet的变量中

数组响应

array:1 [▼
  0 => array:1 [▼
    0 => array:3 [▼
      "id" => "74696"
      "agents" => array:13 [▶]
      "policies" => array:481 [▶]
    ]
    1 => array:3 [▼
      "id" => "1525"
      "agents" => array:8 [▶]
      "policies" => array:357 [▶]
    ]
  ]
  1 => array:1 [▼
    0 => array:3 [▼
      "id" => "73401"
      "agents" => array:1 [ …1]
      "policies" => array:8 [ …8]
    ]
    1 => array:3 [▼
      "id" => "210"
      "agents" => array:13 [ …13]
      "policies" => array:773 [ …773]
    ]
  ]
]

我的嵌套foreach

 foreach($usmDet as $key => $value){
  if(is_array($value)){
    foreach($value as $key => $value){
      echo $key." ".$value."<br>";
    }
  }
  echo "<br>";
}

1 个答案:

答案 0 :(得分:2)

id是数组的一部分,您可以像$value['id']

那样访问它

在第二个foreach中,为了避免混淆,您应该为键和值选择一个不同的名称。

像这样尝试:

foreach($usmDet as $key => $value){
    if(is_array($value)){
        foreach($value as $k => $v){
            echo $v['id'] . "<br>";
        }
    }
}

结果:

74696
1525
73401
210

Php demo

要获取多个嵌套数组时键“ id”的所有值,可以使用array_walk_recursive

$ids = [];
array_walk_recursive($usmDet, function($value, $key) use (&$ids){
    if ($key === "id") {
        $ids[] = $value;
    }
});

print_r($ids);

Php demo