sprintf
sprintf
(PHP 4, PHP 5, PHP 7)
sprintf - 返回格式化的字符串
描述
string sprintf ( string $format [, mixed $args [, mixed $... ]] )
返回根据格式化字符串格式生成的字符串。
参数
format
格式字符串由零个或多个指令构成:直接复制到结果和转换规范的
普通字符(不包括%
),每个规则都会导致获取自己的参数。这适用于sprintf()
和printf()。
每个转换规范都包含一个百分号(%
),后跟一个或多个这些元素,依次为:
- 强制在数字上使用符号( - 或+)的可选
符号说明符
。默认情况下,如果数字为负数,则仅在数字上使用 - 符号。此说明符强制正数以及附加+号。
- 一个可选的
填充说明符
,说明将使用哪个字符将结果填充到正确的字符串大小。这可能是空格字符或0
(零字符)。默认是填充空格。可以通过用单引号('
)作为前缀来指定备用填充字符。看下面的例子。
- 一个可选的
对齐说明符
,说明结果应该是左对齐还是右对齐。默认值是右对齐的; 一个-
这里字符将使它左对齐。
- 一个可选数字,一个
宽度说明符
,表示该转换应该产生多少个字符(最小值)。
- 一个可选的
精度说明符
,其格式为句点(。
),后跟一个可选的十进制数字字符串,表示应该为浮点数显示多少个小数位数。
在字符串上使用此说明符时,它充当截止点,为字符串设置最大字符限制。
此外,填充数字时使用的字符可以选择在句点和数字之间指定。
- 一个
类型说明符
,说明参数数据应被视为什么类型。可能的类型:
- _%_ - a literal percent character. No argument is required.
- _b_ - the argument is treated as an integer and presented as a binary number.
- _c_ - the argument is treated as an integer and presented as the character with that ASCII value.
- _d_ - the argument is treated as an integer and presented as a (signed) decimal number.
- _e_ - the argument is treated as scientific notation (e.g. 1.2e+2). The precision specifier stands for the number of digits after the decimal point since PHP 5.2.1. In earlier versions, it was taken as number of significant digits (one less).
- _E_ - like _%e_ but uses uppercase letter (e.g. 1.2E+2).
- _f_ - the argument is treated as a float and presented as a floating-point number (locale aware).
- _F_ - the argument is treated as a float and presented as a floating-point number (non-locale aware). Available since PHP 5.0.3.
- _g_ - shorter of _%e_ and _%f_.
- _G_ - shorter of _%E_ and _%f_.
- _o_ - the argument is treated as an integer and presented as an octal number.
- _s_ - the argument is treated as and presented as a string.
- _u_ - the argument is treated as an integer and presented as an unsigned decimal number.
- _x_ - the argument is treated as an integer and presented as a hexadecimal number (with lowercase letters).
- _X_ - the argument is treated as an integer and presented as a hexadecimal number (with uppercase letters).
变量将被合成为指定符合适的类型:
类型 | 说明符 |
---|---|
串 | 小号 |
整数 | d,u,c,o,x,X,b |
双 | g,G,e,E,f,F |
警告
试图将字符串和宽度说明符与字符集组合使用,每个字符需要多个字节可能会导致意外的结果
格式字符串支持参数编号/交换。这里是一个例子:
示例#1参数交换
<?php
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location
?>
这将输出“There are 5 monkeys in the tree”。但想象一下,我们在一个单独的文件中创建了一个格式化字符串,通常是因为我们想将其国际化并将其重写为:
示例#2 参数交换
<?php
$format = 'The %s contains %d monkeys';
echo sprintf($format, $num, $location
?>
我们现在有一个问题。格式字符串中占位符的顺序与代码中参数的顺序不匹配。我们希望保持原样,并简单地在格式字符串中指明占位符引用的参数。我们会这样写格式字符串:
示例#3 参数交换
<?php
$format = 'The %2$s contains %1$d monkeys';
echo sprintf($format, $num, $location
?>
这里的另一个好处是,您可以在代码中不添加更多参数的情况下重复占位符。例如:
示例#4 参数交换
<?php
$format = 'The %2$s contains %1$d monkeys.
That\'s a nice %2$s full of %1$d monkeys.';
echo sprintf($format, $num, $location
?>
在使用参数交换时,n $
位置说明符
必须紧跟在百分号(%
)之后,位于任何其他说明符之前,如下例所示。
示例#5 指定填充字符
<?php
echo sprintf("%'.9d\n", 123
echo sprintf("%'.09d\n", 123
?>
上面的例子将输出:
......123
000000123
例#6 使用其他说明符的位置说明符
<?php
$format = 'The %2$s contains %1$04d monkeys';
echo sprintf($format, $num, $location
?>
上面的例子将输出:
The tree contains 0005 monkeys
注意
:试图使用大于的位置说明符PHP_INT_MAX
会导致sprintf()
生成警告。
警告
所述Ç
类型说明符忽略填充和宽度
args
...
返回值
返回根据格式化字符串格式生成的字符串,或在失败时返回FALSE。
例子
示例#7
printf():各种示例
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'
// notice the double %%, this prints a literal '%' character
printf("%%b = '%b'\n", $n // binary representation
printf("%%c = '%c'\n", $c // print the ascii character, same as chr() function
printf("%%d = '%d'\n", $n // standard integer representation
printf("%%e = '%e'\n", $n // scientific notation
printf("%%u = '%u'\n", $n // unsigned integer representation of a positive integer
printf("%%u = '%u'\n", $u // unsigned integer representation of a negative integer
printf("%%f = '%f'\n", $n // floating point representation
printf("%%o = '%o'\n", $n // octal representation
printf("%%s = '%s'\n", $n // string representation
printf("%%x = '%x'\n", $n // hexadecimal representation (lower-case)
printf("%%X = '%X'\n", $n // hexadecimal representation (upper-case)
printf("%%+d = '%+d'\n", $n // sign specifier on a positive integer
printf("%%+d = '%+d'\n", $u // sign specifier on a negative integer
?>
上面的例子将输出:
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
示例#8
printf():字符串说明符
<?php
$s = 'monkey';
$t = 'many monkeys';
printf("[%s]\n", $s // standard string output
printf("[%10s]\n", $s // right-justification with spaces
printf("[%-10s]\n", $s // left-justification with spaces
printf("[%010s]\n", $s // zero-padding works on strings too
printf("[%'#10s]\n", $s // use the custom padding character '#'
printf("[%10.10s]\n", $t // left-justification but with a cutoff of 10 characters
?>
上面的例子将输出:
[monkey]
[ monkey]
[monkey ]
[0000monkey]
[####monkey]
[many monke]
示例#9 sprintf():零填充整数
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day
?>
示例#10 sprintf():格式化货币
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$formatted = sprintf("%01.2f", $money
// echo $formatted will output "123.10"
?>
示例#11 sprintf():科学记数法
<?php
$number = 362525200;
echo sprintf("%.3e", $number // outputs 3.625e+8
?>
扩展内容
- printf() - 输出格式化的字符串
- sscanf() - 根据格式解析字符串的输入
- fscanf() - 根据格式解析文件的输入
- vsprintf() - 返回格式化的字符串
- number_format() - 用分组数千格式化数字
- date() - 格式化本地时间/日期
← soundex
sscanf →