You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中访问JSON指定对象并解决按IATA取航司名报错

如何在PHP中根据IATA代码获取JSON中的航空公司名称

嘿,我看到你遇到的问题了,咱们一步步拆解错误原因,再给你解决办法:

你的代码错误点分析

  1. 错误获取航空公司数组:你写的$appendix_airlines = $array["airlines"][0];是核心错误——原JSON结构里,airlines数组是嵌套在appendix对象里的,而且你加了[0]之后,拿到的是单个航空公司对象,不是整个数组。这就导致后面count($appendix_airlines)统计的是单个对象的属性数量,而非航空公司的总数,循环时自然会出现索引越界的undefined offset错误。
  2. 循环条件错误:for ($i = 0; $i <= $app_airlines_length; $i ++)里的<=会让循环多执行一次,数组索引从0开始,正确的条件应该是$i < $app_airlines_length。

修复后的基础版代码

先确保你已经把JSON文件正确解析成PHP数组(比如用json_decode(file_get_contents('your-json-file.json'), true)),然后修改代码如下:

$iata = "AA";
// 正确获取整个航空公司数组
$appendix_airlines = $array["appendix"]["airlines"];
$app_airlines_length = count($appendix_airlines);

// 修正循环条件,找到目标后跳出循环提升效率
for ($i = 0; $i < $app_airlines_length; $i++) {
    if ($appendix_airlines[$i]["iata"] === $iata) {
        echo $appendix_airlines[$i]["name"]; // 输出:American Airlines
        break;
    }
}

更简洁直观的写法(推荐)

用foreach循环可以避免手动处理索引,代码更易读:

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

foreach ($appendix_airlines as $airline) {
    if ($airline["iata"] === $iata) {
        echo $airline["name"];
        break; // 找到后立即终止循环
    }
}

高频查询优化方案

如果需要多次根据IATA代码查询,建议先把数组转换成以IATA代码为键的关联数组,后续查询直接通过键访问,无需重复循环:

// 预处理:将airlines数组转为以iata为键的关联数组
$airlinesByIata = [];
foreach ($array["appendix"]["airlines"] as $airline) {
    $airlinesByIata[$airline["iata"]] = $airline;
}

// 后续查询只需一行代码
$iata = "AA";
if (isset($airlinesByIata[$iata])) {
    echo $airlinesByIata[$iata]["name"]; // 输出:American Airlines
} else {
    echo "未找到匹配的航空公司";
}

这种方式在多次查询时能大幅提升效率,不用每次都遍历整个数组~

内容的提问来源于stack exchange,提问作者jimothy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:31:07