Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在JSON中引用附录_Php_Json_Multidimensional Array - Fatal编程技术网

使用PHP在JSON中引用附录

使用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

我目前正在开发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&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']。“
”; } } }

这是一段伪代码,但希望您能理解。

谢谢您的帮助,这无疑让我走上了正确的道路。我在阵列方面有一个严重的知识漏洞,所以谢谢你的帮助。对于任何其他遇到这一点的人,我的最终代码在我的编辑中。谢谢你,这肯定让我走上了正确的轨道。我在阵列方面有一个严重的知识漏洞,所以谢谢你的帮助。对于遇到此问题的任何其他人,我的最终代码在编辑中