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 →
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com