【问题标题】:How do I access a specific object in a JSON file in PHP? [duplicate]如何在 PHP 中访问 JSON 文件中的特定对象? [复制]
【发布时间】:2019-11-09 12:20:46
【问题描述】:

我将以下内容作为 JSON 数组的一部分

"appendix": {
  "airlines": [
   {
    "fs": "AA",
    "iata": "AA",
    "icao": "AAL",
    "name": "American Airlines",
    "phoneNumber": "08457-567-567",
    "active": true
   },
   {
    "fs": "LY",
    "iata": "LY",
    "icao": "ELY",
    "name": "El Al",
    "phoneNumber": "+ 972-3-9771111",
    "active": true
   }

我想得到字符串中唯一的“名称”,它的“iata”为“AA”(即“美国航空公司”)。我尝试编写一个 for 循环,其中

$iata = "AA"
$appendix_airlines = $array["airlines"][0];

$app_airlines_length = count($appendix_airlines);      

        for ($i = 0; $i <= $app_airlines_length; $i ++) {
                if ($appendix_airlines[$i]["iata"] == "AA") {
                    echo $appendix_airlines[$i]["name"];
                };
        }

但是,这只会返回未定义的偏移量 = 0、未定义的偏移量 = 1 等错误。我该如何解决这个问题?

基本上,我希望它根据输入的 IATA 代码获取航空公司的名称。

【问题讨论】:

  • 您的 json 无效

标签: php arrays json loops


【解决方案1】:

这是带有 json_decode 的脚本,

$temp = json_decode($json,true); // true as 2nd for raw array
$iata = "AA";
foreach ($temp['appendix']['airlines'] as $key => $value) {
    if($value['iata'] == $iata){
         echo $value["name"]."<br>";
    }
}

Demo

输出

American Airlines

【讨论】:

    【解决方案2】:

    你没有选中数组,你选中了数组的第一个对象:

    $appendix_airlines = $array["airlines"][0];
    

    只需更改为:

    $appendix_airlines = $array["airlines"];
    
    $app_airlines_length = count($appendix_airlines);      
    
            for ($i = 0; $i < $app_airlines_length; $i ++) {
                    if ($appendix_airlines[$i]["iata"] == "AA") {
                        echo $appendix_airlines[$i]["name"];
                    };
            }
    

    注意ArrayIndexOutOfBondsException

    for ($i = 0; $i <= $app_airlines_length; $i ++)
    

    代码应该是$i &lt; $app_airlines_length

    【讨论】:

      【解决方案3】:

      array_column 非常适合在 PHP 中处理 JSON:

      <?php
      
      $json =<<< 'JSON'
      {
          "appendix": {
              "airlines": [
                  {
                      "fs": "AA",
                      "iata": "AA",
                      "icao": "AAL",
                      "name": "American Airlines",
                      "phoneNumber": "08457-567-567",
                      "active": true
                  },
                  {
                      "fs": "LY",
                      "iata": "LY",
                      "icao": "ELY",
                      "name": "El Al",
                      "phoneNumber": "+ 972-3-9771111",
                      "active": true
                  }
              ]
          }
      }
      JSON;
      $data       = json_decode($json, true);
      $iata_names = array_column(
          $data['appendix']['airlines'], 
          'name', 
          'iata'
      );
      
      echo $iata_names['AA'] ?? 'N/A';
      

      输出:

      American Airlines
      

      array_column的结果如下:

      var_export($iata_names);
      

      输出:

      array (
          'AA' => 'American Airlines',
          'LY' => 'El Al',
        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 2021-04-07
        • 1970-01-01
        • 2019-06-01
        相关资源
        最近更新 更多