PHP开发:如何用API返回数据更新对应嵌套数组字段
解决方案:更新航空器数组的经纬度信息
实现步骤
- 解析API返回数据:将JSON格式的API响应转换为PHP关联数组,便于后续操作。
- 合法性校验:确保JSON解析成功且包含有效的
response数组,避免报错。 - 匹配并更新数据:遍历API返回的航空器数据,通过注册号(
reg_number)匹配本地数组中的对应条目,更新经纬度字段。
完整代码示例
// 原始航空器数组 $aircraft = [ 'N7826C' => ['nnum' => 'N7826C', 'name' => 'ANAHEIM POLICE DEPT', 'icon' => 'police', 'lat' => '', 'lng' => '', 'status' => '0'], 'N226PD' => ['nnum' => 'N226PD', 'name' => 'ANAHEIM POLICE DEPT', 'icon' => 'police', 'lat' => '', 'lng' => '', 'status' => '0'], 'N326PD' => ['nnum' => 'N326PD', 'name' => 'CITY OF ANAHEIM', 'icon' => 'police', 'lat' => '', 'lng' => '', 'status' => '0'], 'N826PD' => ['nnum' => 'N826PD', 'name' => 'CITY OF ANAHEIM', 'icon' => 'police', 'lat' => '', 'lng' => '', 'status' => '0'] ]; // 提取注册号列表并请求API $aircraftNNUMlist = implode(',', array_map(function($v) { return $v['nnum']; }, $aircraft)); $json = file_get_contents('https://airlabs.co/api/v9/flights?_fields=reg_number,lat,lng®_number='.$aircraftNNUMlist.'&api_key=XXXXX'); // 处理API请求失败的情况 if ($json === false) { error_log('API请求失败'); // 可添加自定义错误处理逻辑 } else { // 解析JSON为关联数组 $apiData = json_decode($json, true); // 校验解析结果和response字段有效性 if ($apiData && isset($apiData['response']) && is_array($apiData['response'])) { // 遍历API返回的每个航空器数据 foreach ($apiData['response'] as $flight) { $regNumber = $flight['reg_number']; // 检查当前注册号是否存在于本地数组 if (isset($aircraft[$regNumber])) { // 更新经纬度字段 $aircraft[$regNumber]['lat'] = $flight['lat']; $aircraft[$regNumber]['lng'] = $flight['lng']; } } } } // 打印更新后的数组(调试用) // print_r($aircraft);
关键说明
- 利用
$aircraft数组的键(注册号)直接匹配API返回的reg_number,查找效率远高于遍历整个$aircraft数组。 - 严格的合法性校验可以避免因API返回异常(如JSON格式错误、无数据)导致的脚本报错。
- 确保API返回的
reg_number与本地数组的键完全一致(包括大小写、字符格式),否则无法匹配更新。
内容的提问来源于stack exchange,提问作者user8688718
相关产品推荐
相关产品推荐

