在for循环中,我试图计算从JSON提要解码的嵌套数组中的飞行次数。不幸的是,当有更多航班可用时,它仅显示2个航班。我在做什么错了?
来自端点的Json feed示例
{
"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/>';
}
?>
非常感谢您的帮助
答案 0 :(得分:2)
这里真正应该使用的是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 />';
}
简单的演示是here。
如果您仍然想使用for
循环,它应该看起来像:
for ($i = 0; $i < count($flights['response']); $i++) {
echo $flights['response'][$i]['flight']['iata_number'] . '<br />';
}
答案 1 :(得分:1)
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'])
总是等于1,因此您只会像预期的那样循环两次(两次飞行)。我的猜测是应该是count($flights['response'])
或类似的东西。
答案 2 :(得分:0)
您可以使用array_walk_recursive
array_walk_recursive($jarr, function($v, $k) use (&$flights){
if($k == 'iata_number') $flights[] = $v;
});
实时示例:-https://3v4l.org/5Rp9K