PHP技术实现:如何将国家代码替换为国家名称?
解决PHP中将数字国家代码替换为对应国家名称的问题
这问题我之前处理过类似的,给你两个靠谱的PHP解决方案,看哪种更适配你的场景:
方案1:手动创建映射数组(兼容性拉满,无需扩展)
这种方法最直接,适合你已经明确需要处理的国家代码列表的情况,不需要依赖任何PHP扩展,所有环境都能跑:
// 第一步:定义数字国家代码到名称的映射数组,把你需要的代码都补充进去 $countryCodeMap = [ "4" => "阿富汗", "248" => "奥兰群岛", "8" => "阿尔巴尼亚", "12" => "阿尔及利亚", "16" => "美属萨摩亚", "20" => "安道尔", "24" => "安哥拉", // 剩下的代码按这个格式继续添加... ]; // 原业务代码部分 $location = esc_html($resume->candidate_location); $numericCode = esc_html($resume->candidate_country); // 替换逻辑:找到对应名称就用名称,找不到就保留原代码(或者自定义默认文本) $countryName = isset($countryCodeMap[$numericCode]) ? $countryCodeMap[$numericCode] : $numericCode; // 输出最终结果 echo $location . ' ' . $countryName;
小贴士:如果你需要显示英文名称,直接把数组里的中文换成英文就行,比如 "4" => "Afghanistan"
方案2:使用PHP Intl扩展(优雅且支持全国家列表)
如果你不想手动维护映射数组,或者需要支持所有ISO 3166-1数字国家代码,那用PHP的intl扩展是更优的选择,它能直接根据代码生成标准的国家名称:
注意:需要确保你的PHP环境开启了
intl扩展,大部分主流主机都默认支持,若未开启可修改php.ini添加extension=intl或联系主机商配置。
$location = esc_html($resume->candidate_location); $numericCode = esc_html($resume->candidate_country); $countryName = $numericCode; // 默认 fallback 到原代码 if (extension_loaded('intl')) { // 将数字代码转换为ISO 3166-1 alpha-2格式(比如"4" → "AF") $alpha2Code = Locale::getRegionFromCode($numericCode, Locale::REGION_CODE_NUMERIC); if ($alpha2Code) { // 获取对应国家名称,第二个参数可指定显示语言: // - 'en_US' → 英文名称 // - 'zh_CN' → 中文名称 $countryName = Locale::getDisplayCountry('_' . $alpha2Code, 'zh_CN'); } } // 输出结果 echo $location . ' ' . $countryName;
这个方案的好处是不用手动维护庞大的国家列表,Intl扩展会自动处理标准的国家代码映射,而且支持多语言切换。
内容的提问来源于stack exchange,提问作者kibus90
相关产品推荐
相关产品推荐

