1
votes

Compter la quantité d'éléments du tableau imbriqué

Dans la boucle for, j'essaie de compter le nombre de vols dans un tableau imbriqué décodé à partir d'un flux JSON. Malheureusement, il ne montre que 2 vols, lorsque plus de vols sont disponibles. Qu'est-ce que je fais mal?

Exemple de flux Json à partir du point de terminaison

<?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/>';
}
?>

L'exemple de code PHP

{
  "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"
      }
    }
  ]
} .    

Toute aide est très apprécié


0 commentaires

3 Réponses :


1
votes
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']) is always going to equal one, so you're only looping twice as would be expected (two flights). My guess is that's supposed to be count($flights['response']) or something similar.

1 commentaires

Le <= doit également être remplacé par simplement <



2
votes

Ce qu'il faut vraiment utiliser ici, c'est foreach . Avec foreach , vous n'avez pas à vous soucier de count () de votre tableau:

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

Une simple démonstration est ici .

Si vous voulez toujours utiliser pour -loop, cela devrait chercher comme:

$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 />';
}


1 commentaires

Merci! Cela a beaucoup aidé!



0
votes

Vous pouvez utiliser array_walk_recursive

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

Exemple en direct: - https://3v4l.org/5Rp9K


0 commentaires