Подсчитать количество элементов из вложенного массива - PullRequest
1 голос
/ 29 октября 2019

В цикле for я пытаюсь подсчитать количество рейсов во вложенном массиве, декодированном из фида JSON. К сожалению, он показывает только 2 рейса, когда доступно больше рейсов. Что я делаю не так?

Пример фида Json с конечной точки

{
  "response": [
    {
      "flight": {
        "number": "6204",
        "iata_number": "HV6204",
        "icao_number": "TRA6204"
      }
    },
    {
      "flight": {
        "number": "7012",
        "iata_number": "TB7012",
        "icao_number": "JAF7012"
      }
    },
    {
      "flight": {
        "number": "6652",
        "iata_number": "HV6652",
        "icao_number": "TRA6652"
      }
    },
    {
      "flight": {
        "number": "1925",
        "iata_number": "W61925",
        "icao_number": "WZZ1925"
      }
    },
    {
      "flight": {
        "number": "5075",
        "iata_number": "W65075",
        "icao_number": "WZZ5075"
      }
    },
    {
      "flight": {
        "number": "4289",
        "iata_number": "W64289",
        "icao_number": "WZZ4289"
      }
    },
    {
      "flight": {
        "number": "7861",
        "iata_number": "W67861",
        "icao_number": "WZZ7861"
      }
    },
    {
      "flight": {
        "number": "3066",
        "iata_number": "FR3066",
        "icao_number": "RYR3066"
      }
    }
  ]
} .    

Пример кода PHP

<?php    
$url = 'https://api.endpoint'; // path to JSON file
$data = file_get_contents($url); 
$flights = json_decode($data, true); 

for($i=0; $i<=count($flights['response'][0]['flight']['iata_number']); $i++) {
    echo "Flightnumber" . $flights['response'][$i]['flight']["iata_number"] . '<br/>';
}
?>

Любая помощь очень ценится

Ответы [ 3 ]

2 голосов
/ 29 октября 2019

Что действительно нужно использовать здесь, это foreach. С foreach вам не нужно заботиться о count() вашего массива:

$url = 'https://api.endpoint'; // path to JSON file
$data = file_get_contents($url); 
$flights = json_decode($data, true); 

foreach ($flights['response'] as $item) {
    echo $item['flight']['iata_number'] . '<br />';
}

Простая демонстрация здесь .

Если вы все еще хотитеиспользуйте for -loop, он должен выглядеть следующим образом:

for ($i = 0; $i < count($flights['response']); $i++) {
    echo $flights['response'][$i]['flight']['iata_number'] . '<br />';
}
1 голос
/ 29 октября 2019
for($i=0; $i<=count($flights['response'][0]['flight']['iata_number']); $i++) {
    echo "Flightnumber" . $flights['response'][$i]['flight']["iata_number"] . '<br/>';
}

count($flights['response'][0]['flight']['iata_number']) всегда равняется единице, поэтому вы выполняете цикл только дважды, как и ожидалось (два рейса). Я предполагаю, что это должно быть count($flights['response']) или что-то подобное.

0 голосов
/ 30 октября 2019

Вы можете использовать array_walk_recursive

 array_walk_recursive($jarr, function($v, $k) use (&$flights){
  if($k == 'iata_number') $flights[] = $v;
});

Живой пример: - https://3v4l.org/5Rp9K

...