<p>sprintf用来格式化字符串</p><p>说明</p><p>string sprintf ( string $format [, mixed $args [, mixed $... ]]</p><p>参数</p><p>$format<span class="Apple-tab-span" > </span></p><p>可能的格式值:</p><pre class="brush:php;toolbar:false">%%-返回一个百分号%
%b-二进制数
%c-ASCII值对应的字符
%d-包含正负号的十进制数(负数、0、正数)
%e-使用小写的科学计数法(例如1.2e+2)
%E-使用大写的科学计数法(例如1.2E+2)
%u-不包含正负号的十进制数(大于等于0)
%f-浮点数(本地设置)
%F-浮点数(非本地设置)
%g-较短的%e和%f
%G-较短的%E和%f
%o-八进制数
%s-字符串
%x-十六进制数(小写字母)
%X-十六进制数(大写字母)
附加的格式值。必需放置在%和字母之间(例如%.2f):
+(在数字前面加上+或-来定义数字的正负性。默认情况下,只有负数才做标记,正数不做标记)
'(规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。例如:%'x20s(使用"x"作为填充))
-(左调整变量值)
[0-9](规定变量值的最小宽度)
.[0-9](规定小数位数或最大字符串长度)
注意:如果使用多个上述的格式值,它们必须按照以上顺序使用。</pre><p>$args<span class="Apple-tab-span" > </span>规定插到format字符串中 % 符号处的参数</p><p>进制转换</p><pre class="brush:php;toolbar:false">echosprintf('%d',0b11110)."\n";//二进制转成十进制
echosprintf('%d',036)."\n";//八进制转成十进制
echosprintf('%d',0x1e)."\n";//十六进制转成十进制
echosprintf('%x',30)."\n";//十进制转成十六进制
echosprintf('%o',30)."\n";//十进制转成八进制,注意"%o\n"里的"o"是英文字母"o"
输出:
3030301e36</pre><p>控制长度</p><pre class="brush:php;toolbar:false">var_dump(sprintf('%.2f',11.1111));//2个小数位
var_dump(sprintf('%10.2f',11.1111));//最小长度10,2个小数位
var_dump(sprintf('%-10.2f',11.1111));//-表示左对齐,最小长度10,小数点后面最大长度2
var_dump(sprintf('%.5s','helloworld'));//最大长度5,可以截取字符串喔</pre><p>输出:</p><pre class="brush:php;toolbar:false">string(5)"11.11"
string(10)"11.11"
string(10)"11.11"
string(5)"hello"</pre><p>补位</p><p>顾名思义就是长度不够的时候补齐,格式:百分号+单引号+补位符号+长度+类型</p><p>'是补位标志,跟在它后面的就是补位符号,比如我这要显示11个字符长度的手机号码,只显示后4位,其余用*号代替</p><pre class="brush:php;toolbar:false">$username='pigfly';
$phone='12345678901';
echosprintf("%'*11s",substr($phone,-4))."\n";</pre><p>手机号截取后只剩下后4位了,我在前面补*,那么总长度是11,s是字符串类型,%'*11s就是这个意思</p><p>输出:</p><p>*******8901</p><p>占位符</p><p>格式:百分号+数字+$+类型</p><p>//注意这里不要用双引号把字符串包起来,这样会导致php去解析$s变量,或者你可以用\$转义</p><p>echo sprintf('Hi, %1$s~ your phone number is: %2$s, hope you will have a nice day, %1$s!', $username, $phone);</p><p>输出:</p><p>Hi, pigfly~ your phone number is: 12345678901, hope you will have a nice day, pigfly!</p>