Skip to content

有时候经常遇到一些朋友来问我,网上都查不到这个函数怎么用,或者查到的都是旧的资料用不上,有的文章内容质量也是参差不齐,我都会跟他们说,看官方文档最好,有时候我也会参照官方文档,写一些中文的手册,给有需要的朋友,我的文档基本上都有标注时间,比如本文《PHP中的sprintf使用详解-2021》中的2021就是这篇文章是2021年写的,参照的是官方2021年最新的sprintf手册,也许2022年就不再适用了,所以各位朋友如果参考这篇文章去使用的时候,遇到不能用的情况,看看是不是这种方法已经过期了。

sprintf

(PHP 4, PHP 5, PHP 7, PHP 8)

sprintf — Return a formatted string

这是官方最新的手册,支持PHP8,sprintf是非常非常基础的一个字符串格式化工具,我最长使用C语言的时候就经常用到,基本使用方法是差不多的,下面是PHP的使用格式:

sprintf ( string $format , mixed ...$values ) : string
sprintf ( string $format , mixed ...$values ) : string

题外话,Kotlin和PHP,Javascript的语法真的非常像,写项目的时候我经常搞混。

  • $format 第一个参数是你需要格式化的字符串,里面会带一些参数
  • mixed...$values 这是表示组合,因为太灵活了,从第二个参数开始随便你放

说明符%

上面这两解释我估计大部分人看不懂,那就"show me the code"吧!

<?php
$num = 3;
$title = 'title';

$format = 'SEO中的TKD是 %d 个参数 其中T代表 %s';
echo sprintf($format, $num, $title);
?>
<?php
$num = 3;
$title = 'title';

$format = 'SEO中的TKD是 %d 个参数 其中T代表 %s';
echo sprintf($format, $num, $title);
?>

以上这段代码输出如下内容:

SEO中的TKD是 3 个参数 其中 T 代表title

上面说明符%d%s两边都有空格,也会被一同输出。下面是Sprintf的说明符分类:

TypeSpecifiers
strings
integerd, u, c, o, x, X, b
doubleg, G, e, E, f, F

其实也就分为三大类,其中经常使用的就几个,其实看字母就知道大概表达什么意思了,具体每一个到时候的时候再去查就行了。

占位符n$

我觉得其中最主要的就是占位符n$的使用,其中的n代表数字,表示后面参数的位置,看个例子:

<?php
$format = '谷歌已经将TKD中的 %2$s 排除,现在只有 %1$d 个参数。
          虽然只有%1$d参数,但是一般情况我还会写上 %2$s ';
echo sprintf($format, $num, $keyword);
?>
<?php
$format = '谷歌已经将TKD中的 %2$s 排除,现在只有 %1$d 个参数。
          虽然只有%1$d参数,但是一般情况我还会写上 %2$s ';
echo sprintf($format, $num, $keyword);
?>

$format中,我们先使用了第二个参数,再使用第一个参数,只要填入正确的参数位置就可以,而且这样的方式还能复用。

左填充字符0

填充字符中有经常被用到的一个叫左填充字符“0”,这个在日期填充的时候经常用到,如下代码所示:

<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>

上面代码的意思是,年4位不够左边补充0,月,日两位,不够补0。

自选填充自符`

如果你不想用0去填充多余的位置,你可以自选,如下代码:

<?php
echo sprintf("%'.9d\\n", 123);
?>

输出效果:

......123
<?php
echo sprintf("%'.9d\\n", 123);
?>

输出效果:

......123

格式化数字

有时候做项目,需要输出格式化的数字,比如资金方面,需要小数点保留几位之类的,如下:

<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
echo $money;
echo "\\n";
$formatted = sprintf("%01.2f", $money);
echo $formatted;
?>

输出如下:

123.1
123.10
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
echo $money;
echo "\\n";
$formatted = sprintf("%01.2f", $money);
echo $formatted;
?>

输出如下:

123.1
123.10

结论

sprintf的使用大概就这几类,但是组合起来就会千变成化,这些就需要你在项目中慢慢实践了,希望我的文章对你有所帮助。