Проблема Итерирование по многомерному массиву в PHP - PullRequest
0 голосов
/ 22 декабря 2018

Работа над приложением 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 голосов
/ 22 декабря 2018

Идентификатор является частью массива, так как вы можете получить к нему доступ, например, $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

...