使用PHP在JSON中引用附录
我目前正在开发FlightStats Schedules API,这是为了让用户能够搜索给定航线、给定日期的航班计划 终点看起来是这样的使用PHP在JSON中引用附录,php,json,multidimensional-array,Php,Json,Multidimensional Array,我目前正在开发FlightStats Schedules API,这是为了让用户能够搜索给定航线、给定日期的航班计划 终点看起来是这样的 https://api.flightstats.com/flex/schedules/rest/v1/json/from/{departing_airport}/to/{arriving_airport}/departing/{YYYY/MM/DD}?appId=APP_ID&appKey=API_KEY&codeType=iata&e
https://api.flightstats.com/flex/schedules/rest/v1/json/from/{departing_airport}/to/{arriving_airport}/departing/{YYYY/MM/DD}?appId=APP_ID&appKey=API_KEY&codeType=iata&extendedOptions=includeDirects
用户将指定出发机场、到达机场和日期为YYYY/MM/DD
为了给出一个示例响应,我将分别使用MEL、NRT和2015/11/12
{
"request": {
"departureAirport": {
"requestedCode": "mel",
"fsCode": "MEL"
},
"arrivalAirport": {
"requestedCode": "nrt",
"fsCode": "NRT"
},
"codeType": {
"requested": "iata",
"interpreted": "IATA"
},
"departing": true,
"date": {
"year": "2015",
"month": "11",
"day": "12",
"interpreted": "2015-11-12"
},
"url": "https://api.flightstats.com/flex/schedules/rest/v1/json/from/mel/to/nrt/departing/2015/11/12"
},
"scheduledFlights": [
{
"carrierFsCode": "JQ",
"flightNumber": "23",
"departureAirportFsCode": "MEL",
"arrivalAirportFsCode": "NRT",
"stops": 0,
"departureTerminal": "2",
"arrivalTerminal": "3",
"departureTime": "2015-11-12T00:55:00.000",
"arrivalTime": "2015-11-12T08:45:00.000",
"flightEquipmentIataCode": "787",
"isCodeshare": false,
"isWetlease": false,
"serviceType": "J",
"serviceClasses": [
"R",
"F",
"J",
"Y"
],
"trafficRestrictions": [],
"codeshares": [
{
"carrierFsCode": "JL",
"flightNumber": "5086",
"serviceType": "J",
"serviceClasses": [
"Y"
],
"trafficRestrictions": [],
"referenceCode": 2088960
}
],
"referenceCode": "1492-2106903--"
},
{
"carrierFsCode": "JL",
"flightNumber": "5086",
"departureAirportFsCode": "MEL",
"arrivalAirportFsCode": "NRT",
"stops": 0,
"departureTerminal": "2",
"arrivalTerminal": "3",
"departureTime": "2015-11-12T00:55:00.000",
"arrivalTime": "2015-11-12T08:45:00.000",
"flightEquipmentIataCode": "787",
"isCodeshare": true,
"isWetlease": false,
"serviceType": "J",
"serviceClasses": [
"Y"
],
"trafficRestrictions": [],
"operator": {
"carrierFsCode": "JQ",
"flightNumber": "23",
"serviceType": "J",
"serviceClasses": [
"R",
"F",
"J",
"Y"
],
"trafficRestrictions": []
},
"codeshares": [],
"referenceCode": "1492-2106903--2088960"
}
],
"appendix": {
"airlines": [
{
"fs": "JL",
"iata": "JL",
"icao": "JAL",
"name": "JAL",
"active": true
},
{
"fs": "JQ",
"iata": "JQ",
"icao": "JST",
"name": "Jetstar",
"active": true
}
],
"airports": [
{
"fs": "NRT",
"iata": "NRT",
"icao": "RJAA",
"name": "Narita International Airport",
"street1": "成田空港第2PTB(バス), Narita",
"street2": "Chiba Prefecture",
"city": "Tokyo",
"cityCode": "TYO",
"countryCode": "JP",
"countryName": "Japan",
"regionName": "Asia",
"timeZoneRegionName": "Asia/Tokyo",
"localTime": "2015-09-21T09:37:31.611",
"utcOffsetHours": 9,
"latitude": 35.773213,
"longitude": 140.387443,
"elevationFeet": 135,
"classification": 1,
"active": true
},
{
"fs": "MEL",
"iata": "MEL",
"icao": "YMML",
"name": "Tullamarine Airport",
"city": "Melbourne",
"cityCode": "MEL",
"stateCode": "VIC",
"countryCode": "AU",
"countryName": "Australia",
"regionName": "Oceania",
"timeZoneRegionName": "Australia/Sydney",
"localTime": "2015-09-21T10:37:31.611",
"utcOffsetHours": 10,
"latitude": -37.669611,
"longitude": 144.849777,
"elevationFeet": 434,
"classification": 1,
"active": true
}
],
"equipments": [
{
"iata": "787",
"name": "Boeing 787",
"turboProp": false,
"jet": true,
"widebody": true,
"regional": false
}
]
}
}
我在这个阶段所期望的输出是例如
[附录->航空公司->名称]-[航班时刻表->承运人代码][航班时刻表->航班号]
捷星-JQ23
日本航空-JL5086
简而言之,为了获得所需的输出,我需要在每个结果的附录中对照航空公司名称引用CarrierScode。请记住,此示例(为简洁起见)是一条低流量路线。以肯尼迪机场到希思罗机场为例,由于这条航线上的航班数量,情况要复杂得多
我的非常不正确的PHP目前看起来是这样的
$flight_json=get_flight_stats($from,$to,$date);
$flight_stats=$flight_json['scheduledFlights'];
$airlines=$flight_json['appendix']['airlines'];
foreach($flight_stats as $flight_stat)
{
echo $flight_stat['carrierFsCode'].$flight_stat['flightNumber']."<br>";
echo "<br>";
}
foreach($airlines as $airline)
{
echo $airline['name']."<br>";
}
$flight\u json=get\u flight\u stats($from,$to,$date);
$flight_stats=$flight_json['scheduledFlights'];
$airlines=$flight_json['附录]['航空公司];
foreach($flight\u stats作为$flight\u stat)
{
echo$flight_stat['CarrierScode']。$flight_stat['flightNumber']。“
”;
回声“
”;
}
foreach($航空公司作为$航空公司)
{
echo$airline['name']。“
”;
}
返回
JQ23
JL5086
捷星
日航
get_flight_stats函数用于创建端点URL、get_文件内容、json_解码,然后返回数组_映射
如果有人问我这个问题,我很抱歉,因为我没有找到合适的搜索词,我发现自己有点卡住了
(编辑)
感谢@jolyonruss,我的最终代码如下:
foreach($flight_stats as $flight_stat)
{
/* store the fsCode for this flight */
$fsCode = $flight_stat['carrierFsCode'];
foreach($airlines as $airline)
{
/* test to see if the airline's fsCode matches the flight */
if($airline['fs'] === $fsCode)
{
echo $airline['name']." - ".$fsCode.$flight_stat['flightNumber']."<br>";
}
}
}
foreach($flight\u stats作为$flight\u stat)
{
/*存储此航班的fsCode*/
$fsCode=$flight_stat['carrierscode'];
foreach($航空公司作为$航空公司)
{
/*测试航空公司的fsCode是否与航班匹配*/
如果($airline['fs']==$fsCode)
{
echo$airline['name']。“-”$fsCode.$flight_stat['flightNumber']。“
”;
}
}
}
处理了一个问题。看起来您需要嵌套for循环,如下所示:
$flight_json=get_flight_stats($from,$to,$date);
$flight_stats=$flight_json['scheduledFlights'];
$airlines=$flight_json['appendix']['airlines'];
foreach($flight_stats as $flight_stat)
{
echo $flight_stat['carrierFsCode'].$flight_stat['flightNumber']."<br>";
echo "<br>";
/* store the fsCode for this flight */
$fsCode = $flight_stat['carrierFsCode'];
foreach($airlines as $airline)
{
/* test to see if the airline's fsCode matches the flight */
if($airline['fs'] === $fsCode)
{
echo $airline['name']."<br>";
}
}
}
$flight\u json=get\u flight\u stats($from,$to,$date);
$flight_stats=$flight_json['scheduledFlights'];
$airlines=$flight_json['附录]['航空公司];
foreach($flight\u stats作为$flight\u stat)
{
echo$flight_stat['CarrierScode']。$flight_stat['flightNumber']。“
”;
回声“
”;
/*存储此航班的fsCode*/
$fsCode=$flight_stat['carrierscode'];
foreach($航空公司作为$航空公司)
{
/*测试航空公司的fsCode是否与航班匹配*/
如果($airline['fs']==$fsCode)
{
echo$airline['name']。“
”;
}
}
}
这是伪代码,但希望您能理解。看起来您需要嵌套for循环,如下所示:
$flight_json=get_flight_stats($from,$to,$date);
$flight_stats=$flight_json['scheduledFlights'];
$airlines=$flight_json['appendix']['airlines'];
foreach($flight_stats as $flight_stat)
{
echo $flight_stat['carrierFsCode'].$flight_stat['flightNumber']."<br>";
echo "<br>";
/* store the fsCode for this flight */
$fsCode = $flight_stat['carrierFsCode'];
foreach($airlines as $airline)
{
/* test to see if the airline's fsCode matches the flight */
if($airline['fs'] === $fsCode)
{
echo $airline['name']."<br>";
}
}
}
$flight\u json=get\u flight\u stats($from,$to,$date);
$flight_stats=$flight_json['scheduledFlights'];
$airlines=$flight_json['附录]['航空公司];
foreach($flight\u stats作为$flight\u stat)
{
echo$flight_stat['CarrierScode']。$flight_stat['flightNumber']。“
”;
回声“
”;
/*存储此航班的fsCode*/
$fsCode=$flight_stat['carrierscode'];
foreach($航空公司作为$航空公司)
{
/*测试航空公司的fsCode是否与航班匹配*/
如果($airline['fs']==$fsCode)
{
echo$airline['name']。“
”;
}
}
}
这是一段伪代码,但希望您能理解。谢谢您的帮助,这无疑让我走上了正确的道路。我在阵列方面有一个严重的知识漏洞,所以谢谢你的帮助。对于任何其他遇到这一点的人,我的最终代码在我的编辑中。谢谢你,这肯定让我走上了正确的轨道。我在阵列方面有一个严重的知识漏洞,所以谢谢你的帮助。对于遇到此问题的任何其他人,我的最终代码在编辑中