參考 PHP metaphone() 函數詳解,此處補充 localeconv() 相關內容。
array localeconv ( void )
返回包含當前區域設置 (由 setlocale() 設置) 的數字與貨幣格式信息的關聯數組。PHP 4.0.5+ 可用。
| 鍵名 | 含義 | 示例 (en_US) |
|---|---|---|
decimal_point | 小數點字符 | . |
thousands_sep | 千位分隔符 | , |
int_curr_symbol | 國際貨幣符號 | USD |
currency_symbol | 本地貨幣符號 | $ |
mon_decimal_point | 貨幣小數點 | . |
mon_thousands_sep | 貨幣千位分隔符 | , |
positive_sign | 正數符號 | + |
negative_sign | 負數符號 | - |
int_frac_digits | 國際標準小數位 | 2 |
frac_digits | 本地標準小數位 | 2 |
p_cs_precedes | 貨幣符號在正數前(1)或後(0) | 1 |
p_sep_by_space | 正數符號與數值間有空格(1/0) | 0 |
n_cs_precedes | 貨幣符號在負數前(1)或後(0) | 1 |
n_sep_by_space | 負數符號與數值間有空格(1/0) | 0 |
p_sign_posn | 正數格式位置 0-4 | 1 |
n_sign_posn | 負數格式位置 0-4 | 1 |
grouping | 數字分組數組 (如 [3,3] 表示 1,000,000) | [3,3] |
mon_grouping | 貨幣分組數組 | [3,3] |
| 值 | 格式示例 |
|---|---|
| 0 | (1.23) 或 ($1.23) |
| 1 | +1.23 或 +$1.23 |
| 2 | 1.23+ 或 $1.23+ |
| 3 | +1.23 或 +$1.23 (符號緊貼貨幣符號) |
| 4 | 1.23+ 或 $1.23+ (符號緊貼貨幣符號) |
= 0 ? $lc['p_cs_precedes'] : $lc['n_cs_precedes'];
$space = $amount >= 0 ? $lc['p_sep_by_space'] : $lc['n_sep_by_space'];
$sep = $space ? ' ' : '';
return $precedes ? "{$symbol}{$sep}{$num}" : "{$num}{$sep}{$symbol}";
}
// 測試
setlocale(LC_ALL, 'en_US.UTF-8');
echo formatPrice(1234.56) . "\n"; // $1,234.56
setlocale(LC_ALL, 'de_DE.UTF-8');
echo formatPrice(1234.56) . "\n"; // 1.234,56 €
setlocale(LC_ALL, 'zh_CN.UTF-8');
echo formatPrice(1234.56) . "\n"; // ¥1,234.56
?>
setlocale() 影響進程級區域設置,多線程/協程環境下需注意競態(建議用 NumberFormatter ICU 類替代)。chs vs zh_CN),部署時需適配。metaphone() 解決「聽起來像」的匹配問題,localeconv() 解決「長得像當地習慣」的顯示問題。兩者分別服務於文本檢索與國際化展示,是 PHP 內置國際化工具箱的重要組成部分。