有时候经常遇到一些朋友来问我,网上都查不到这个函数怎么用,或者查到的都是旧的资料用不上,有的文章内容质量也是参差不齐,我都会跟他们说,看官方文档最好,有时候我也会参照官方文档,写一些中文的手册,给有需要的朋友,我的文档基本上都有标注时间,比如本文《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的说明符分类:
Type | Specifiers |
---|---|
string | s |
integer | d, u, c, o, x, X, b |
double | g, 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
的使用大概就这几类,但是组合起来就会千变成化,这些就需要你在项目中慢慢实践了,希望我的文章对你有所帮助。