如何使用关联数组并与索引数组匹配?含机场代码映射及文件格式问题
解决你的两个代码问题
1. 关联城市名与机场代码的匹配问题
其实核心是构建一个城市名到机场代码的映射表,这样你就能通过菜单里的城市名直接拿到对应的机场代码了。举几个常见场景的实现方式:
方式一:手动构建关联数组(字典)
如果你的城市和机场对应关系是固定的,直接写一个键值对数组:
// PHP 示例 $cityAirportMap = [ "Atlanta" => "ATL", "New York" => "JFK", "Los Angeles" => "LAX" // 其他城市继续补充 ]; // 当用户选择菜单里的城市名(比如$selectedCity = "Atlanta") $matchedAirportCode = $cityAirportMap[$selectedCity]; // 现在$matchedAirportCode就是ATL,可以拿去和航空公司文件匹配啦
# Python 示例 city_airport_map = { "Atlanta": "ATL", "New York": "JFK", "Los Angeles": "LAX" } selected_city = "Atlanta" matched_airport_code = city_airport_map[selected_city]
方式二:从文件加载映射关系
如果城市和机场的对应关系存在某个配置文件里(比如每行是城市名\t机场代码),可以先把文件内容读入关联数组:
# Bash 示例,先把文件转成关联数组 declare -A cityAirportMap while IFS=$'\t' read -r city code; do cityAirportMap["$city"]="$code" done < city_airport_list.txt # 之后用选中的城市名取代码:${cityAirportMap["Atlanta"]}
这样不管菜单显示的是城市名,你都能快速拿到对应的机场代码,和航空公司文件里的代码关联上啦。
2. 清理航空公司文件里的多余制表符
多余制表符(连续多个制表符)可以用文本处理工具或者代码里的正则替换来解决:
命令行快速处理
用sed或者awk批量替换文件里的连续制表符为单个:
# 替换所有连续制表符为单个,输出到新文件 sed 's/\t\+/\t/g' airlines.txt > cleaned_airlines.txt # 如果是制表符和空格混合的情况,统一换成单个制表符 sed 's/[ \t]\+/\t/g' airlines.txt > cleaned_airlines.txt
代码里处理(以PHP为例)
读取文件时逐行清理:
$file = fopen("airlines.txt", "r"); $cleanFile = fopen("cleaned_airlines.txt", "w"); while (!feof($file)) { $line = fgets($file); // 把连续的制表符替换成单个 $cleanLine = preg_replace('/\t+/', "\t", $line); fwrite($cleanFile, $cleanLine); } fclose($file); fclose($cleanFile);
这样处理后,文件里的列分隔就统一成单个制表符,后续读取匹配的时候就不会出问题啦。
内容的提问来源于stack exchange,提问作者alizeh
相关产品推荐
相关产品推荐

