(PHP 5, PHP 7, PHP 8)
vfprintf — 将格式化的字符串写入流
stream
format
格式字符串由零个或多个指令组成:直接复制到结果中的普通字符(不包括 %
)和 *转换说明符*,每个转换说明符都会获取自己的参数。
转换说明符遵循以下原型:%[argnum$][flags][width][.precision]specifier
。
后面跟着美元符号 $
的整数,用于指定转换中要处理的第几个参数。
Flag | 描述 |
---|---|
- |
在给定的字段宽度内左对齐;右对齐是默认值 |
+ |
用加号 + 为正数加前缀;默认情况下,只有负数加前缀。 |
(空格) |
用空格填充结果。这是默认值。 |
0 |
仅用零填充数字左侧。对于 s 说明符,这也可以用零填充右侧。 |
' (字符) |
用字符 (char) 填充结果。 |
要么是一个整数,表示此转换应产生的最小字符数,要么是 *
。如果使用 *
,则宽度将作为附加整数传递,该整数位于格式说明符之前。
一个句点 .
,后面可以是可选的整数或 *
,其含义取决于说明符
e
、E
、f
和 F
说明符:这是小数点后要打印的位数(默认情况下,为 6)。
g
、G
、h
和 H
说明符:这是要打印的有效数字的最大数量。
s
说明符:它充当截止点,为字符串设置最大字符限制。
注意: 如果指定了句点,但没有为精度指定明确的值,则假定为 0。如果使用
*
,则精度将作为附加整数传递,该整数位于格式说明符之前。
Specifier | 描述 |
---|---|
% |
一个文字百分号字符。不需要参数。 |
b |
参数被视为整数,并以二进制数表示。 |
c |
参数被视为整数,并以该 ASCII 码的字符表示。 |
d |
参数被视为整数,并以(带符号)十进制数表示。 |
e |
参数被视为科学计数法(例如 1.2e+2)。 |
E |
与 e 说明符相同,但使用大写字母(例如 1.2E+2)。 |
f |
参数被视为浮点数,并以浮点数表示(区域感知)。 |
F |
参数被视为浮点数,并以浮点数表示(非区域感知)。 |
g |
通用格式。 设 P 等于精度(如果非零)、6(如果省略精度)或 1(如果精度为零)。然后,如果使用 E 样式的转换具有 X 的指数 如果 P > X ≥ −4,则转换使用 f 样式和精度 P − (X + 1)。否则,转换使用 e 样式和精度 P − 1。 |
G |
与 g 说明符相同,但使用 E 和 f 。 |
h |
与 g 说明符相同,但使用 F 。从 PHP 8.0.0 开始可用。 |
H |
与 g 说明符相同,但使用 E 和 F 。从 PHP 8.0.0 开始可用。 |
o |
参数被视为整数,并以八进制数表示。 |
s |
参数被视为字符串并以字符串表示。 |
u |
参数被视为整数,并以无符号十进制数表示。 |
x |
参数被视为整数,并以十六进制数表示(使用小写字母)。 |
X |
参数被视为整数,并以十六进制数表示(使用大写字母)。 |
c
类型说明符会忽略填充和宽度。
尝试将字符串和宽度说明符组合使用,与每个字符需要一个字节以上的字符集一起使用可能会导致意外结果。
变量将被强制转换为适合说明符的类型
类型 | Specifiers |
---|---|
字符串 | s |
整数 |
d 、u 、c 、o 、x 、X 、b |
浮点数 |
e 、E 、f 、F 、g 、G 、h 、H |
values
返回输出字符串的长度。
从 PHP 8.0.0 开始,如果参数数量为零,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING
而不是。
从 PHP 8.0.0 开始,如果 [width]
小于零或大于 PHP_INT_MAX
,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING
而不是。
从 PHP 8.0.0 开始,如果 [precision]
小于零或大于 PHP_INT_MAX
,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING
而不是。
从 PHP 8.0.0 开始,当提供的参数少于所需参数时,会抛出 ValueError。在 PHP 8.0.0 之前,会返回 false
,并发出 E_WARNING
而不是。
版本 | 描述 |
---|---|
8.0.0 | 此函数不再在失败时返回 false 。 |
8.0.0 | 如果参数数量为零,则抛出 ValueError;之前此函数会发出 E_WARNING 而不是。 |
8.0.0 | 如果 [width] 小于零或大于 PHP_INT_MAX ,则抛出 ValueError;之前此函数会发出 E_WARNING 而不是。 |
8.0.0 | 如果 [precision] 小于零或大于 PHP_INT_MAX ,则抛出 ValueError;之前此函数会发出 E_WARNING 而不是。 |
8.0.0 | 当提供的参数少于所需参数时,抛出 ValueError;之前此函数会发出 E_WARNING 而不是。 |
示例 #1 vfprintf(): 零填充整数
<?php
if (!($fp = fopen('date.txt', 'w')))
return;
vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// 将格式化的 ISO 日期写入 date.txt 文件
?>