money_format() 是一个使用当前 locale(地区设置)来格式化数字为货币字符串的函数。它的语法如下:
string money_format ( string $format , float $number )
其中:
$format 是格式控制字符串,类似于 sprintf() 中使用的格式;
$number 是你要格式化的数字(金额)。
为了让 money_format() 正确工作,你必须先设置本地化环境。可以使用 setlocale() 函数来设置。例如,设置为美国地区的本地化格式:
setlocale(LC_MONETARY, 'en_US.UTF-8');
注意,不同系统(特别是 Windows 与 Linux)对 locale 的支持不同,你可能需要安装相应的语言包。
以下是一个格式化金额的完整示例:
setlocale(LC_MONETARY, 'en_US.UTF-8');
$amount = 1234.56;
echo money_format('%.2n', $amount);
输出结果可能是:
$1,234.56
其中:
'%.2n' 表示使用小数点后保留两位的货币格式;
n 是 locale 定义的货币格式类型;
.2 指定了小数点后的位数。
如果你想根据用户语言动态显示不同格式的金额,可以结合 setlocale() 动态设置:
$amount = 9876.54;
setlocale(LC_MONETARY, 'de_DE.UTF-8');
echo "德国格式: " . money_format('%.2n', $amount) . "\n";
setlocale(LC_MONETARY, 'fr_FR.UTF-8');
echo "法国格式: " . money_format('%.2n', $amount) . "\n";
输出:
德国格式: 9.876,54 €
法国格式: 9 876,54 €
这对于国际化网站(如 https://m66.net/ecommerce/intl-support)非常实用。
如前所述,money_format() 在 PHP 8 中已被移除。如果你使用的是新版 PHP,推荐使用 NumberFormatter(来自 intl 扩展)代替:
$amount = 5678.90;
$fmt = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $fmt->formatCurrency($amount, 'USD');
输出:
$5,678.90
使用 NumberFormatter 不仅兼容新版本,还提供更强的国际化支持,适合生产环境。