中文名 * * @var array */ private const COUNTRIES = [ 'CN' => '中国', 'HK' => '中国香港', 'MO' => '中国澳门', 'TW' => '中国台湾', 'US' => '美国', 'CA' => '加拿大', 'GB' => '英国', 'DE' => '德国', 'FR' => '法国', 'IT' => '意大利', 'ES' => '西班牙', 'NL' => '荷兰', 'BE' => '比利时', 'CH' => '瑞士', 'AT' => '奥地利', 'SE' => '瑞典', 'NO' => '挪威', 'DK' => '丹麦', 'FI' => '芬兰', 'IE' => '爱尔兰', 'PT' => '葡萄牙', 'PL' => '波兰', 'CZ' => '捷克', 'HU' => '匈牙利', 'RO' => '罗马尼亚', 'GR' => '希腊', 'RU' => '俄罗斯', 'UA' => '乌克兰', 'TR' => '土耳其', 'IL' => '以色列', 'SA' => '沙特阿拉伯', 'AE' => '阿联酋', 'QA' => '卡塔尔', 'KW' => '科威特', 'IN' => '印度', 'PK' => '巴基斯坦', 'BD' => '孟加拉国', 'TH' => '泰国', 'VN' => '越南', 'MY' => '马来西亚', 'SG' => '新加坡', 'ID' => '印度尼西亚', 'PH' => '菲律宾', 'JP' => '日本', 'KR' => '韩国', 'AU' => '澳大利亚', 'NZ' => '新西兰', 'BR' => '巴西', 'MX' => '墨西哥', 'AR' => '阿根廷', 'CL' => '智利', 'CO' => '哥伦比亚', 'PE' => '秘鲁', 'ZA' => '南非', 'EG' => '埃及', 'NG' => '尼日利亚', 'KE' => '肯尼亚', ]; /** * 下拉选项 ISO2 => 中文名 * * @return array */ public static function getOptions(): array { return self::COUNTRIES; } /** * 校验是否为合法 ISO2 代码 */ public static function isValidCode(string $code): bool { $code = strtoupper(trim($code)); return isset(self::COUNTRIES[$code]); } /** * 规范化并过滤国家代码列表 * * @param array|string $codes * @return array */ public static function normalizeCodes($codes): array { if (is_string($codes)) { $codes = explode(',', $codes); } if (!is_array($codes)) { return []; } $result = []; foreach ($codes as $code) { $code = strtoupper(trim((string)$code)); if ($code !== '' && self::isValidCode($code) && !in_array($code, $result, true)) { $result[] = $code; } } sort($result); return $result; } /** * 逗号分隔 ISO 代码转中文展示 */ public static function codesToText(string $codes): string { if ($codes === '') { return ''; } $parts = []; foreach (explode(',', $codes) as $code) { $code = strtoupper(trim($code)); if ($code === '') { continue; } $parts[] = self::COUNTRIES[$code] ?? $code; } return implode(',', $parts); } /** * 数组转存储字符串 * * @param array $codes */ public static function codesToStorage(array $codes): string { return implode(',', self::normalizeCodes($codes)); } }