字符串函数

PHP vprintf() 函数

主题:PHP 字符串参考上一页|下一页

说明

vprintf() 函数输出一个格式化的字符串。

此函数接受一个特殊的格式字符串,然后是任意数量的其他参数,这些参数将被格式化并拼接到格式字符串中的指定位置以生成结果。

相关函数: fprintf(), printf(), sprintf(), vfprintf() and vsprintf().

下表总结了该函数的技术细节。

返回值: 返回输出字符串的长度。
版本: PHP 4.1.0+

语法

vprintf() 函数的基本语法如下:

vprintf(format, argument_array);

以下示例显示了 vprintf() 函数的作用。

<?php
// 样本数组
$argarray = array("50", "United States");

// 定义格式字符串
$format = "There are %d states in the %s.";

// 格式化并打印字符串
vprintf($format, $argarray);
?>

注意: format 字符串中的每个字符都将按字面意思打印,除了 % 字符和紧随其后的字符。 % 字符表示 转换规范 的开始,它指定如何打印 format 字符串后面的参数。

提示: vprintf() 函数与 printf() 相同,但有一个例外。 vprintf() 函数接受参数数组,而 printf() 接受参数列表。


参数

vprintf() 函数接受以下参数。

参数 说明
format 必需的。 指定格式字符串。 它由普通字符(不包括%)和一个或多个转换规范组成。
argument_array 必需的。 指定要格式化并插入到 format 字符串中转换规范位置的参数数组。

转换规范语法

本节详细介绍格式字符串中转换规范的语法。

转换规范以百分号 (%) 开头。 您必须在 format 字符串之后包含传递给 vprintf() 函数的每个参数的转换规范。

或者,您可以使用后跟美元符号的参数编号(即 argnum$)将 format 字符串中的多个转换规范应用于同一参数。 它必须紧跟在百分号 (%) 之后,在任何其他说明符之前。 请参阅更多示例部分。

转换规范通常具有以下语法:

%[argnum$][flags][width][.precision]specifier

argnum

一个整数,后跟一个美元符号 $,用于指定在转换中处理哪个数字参数。

flags

标志由以下一个或多个字符组成:

标志 说明
+ 在正数之前添加一个加号。 默认情况下,只标记负数。
- 在给定的字段宽度内左对齐; 右对齐是默认设置。
(space) 用空格填充结果。 这是默认设置。
0 只用零填充数字。 使用 s 说明符,这也可以右填充零。
'(char) 用字符 (char) 填充结果。 必须与宽度说明符一起使用。

width

一个整数,指示此转换应产生多少个字符(最少)。

precision

句点 (.) 后跟一个整数,其含义取决于说明符:

  • 对于 e、E、f 和 F 说明符:这是要在小数点后打印的位数(默认为 6)。
  • 对于 g 和 G 说明符:这是要打印的有效数字的最大数量。
  • 对于 s 说明符:它充当截止点,为字符串设置最大字符限制。

如果指定的周期没有明确的精度值,则假定为 0。

specifier

单个字符,指示应如何解释参数的类型。

说明符 说明
% 文字百分比字符。 不需要参数。
b 参数被视为整数并打印为二进制数。
c 参数被视为整数并打印为具有该 ASCII 的字符。
d 参数被视为整数并打印为(有符号的)十进制数。
e 参数被视为科学记数法(例如 1.2e+2)。 精度说明符代表小数点后的位数。
E 类似于 e 说明符,但使用大写字母(例如 1.2E+2)。
f 参数被视为浮点数并打印为浮点数(区域设置感知)。
F 参数被视为浮点数并打印为浮点数(非语言环境感知)。
g 一般格式。 使用 e 和 f。
G 类似于 g 说明符,但使用 E 和 f。
o 参数被视为整数并打印为八进制数。
s 参数被当作字符串处理和打印。
u 参数被视为整数并打印为无符号十进制数。
x 参数被视为整数并打印为十六进制数字(小写字母)。
X 参数被视为整数并打印为十六进制数字(大写字母)。

更多示例

这里有更多示例展示了 vprintf() 函数的实际工作原理:

以下示例显示如何将多个转换规范应用于同一参数。

<?php
// 样本数组
$array = array('star');

// 定义格式字符串
$format = 'The polar %1$s is the brightest %1$s in the sky.';

// 格式化并打印字符串
vprintf($format, $array);
?>

提示: 如果格式字符串用双引号 ("") 括起来,则需要将 argnum 后面的美元符号用反斜杠字符 (\) 转义,如下所示 %1\$s,以便 PHP 不会尝试将它们解释为变量。 使用这样的反斜杠称为转义序列。

以下示例显示了如何格式化带小数点和不带小数点的相同数字。

<?php
// 样本数组
$array = array(499);

// 定义格式字符串
$format = "The number without decimal points: %1\$d, and the number with two decimal points: %1\$.2f";

//格式化并打印字符串
vprintf($format, $array);
?>

默认情况下,每个转换规范将按照它们在数组中列出的顺序替换为格式化参数。 但是,您可以使用 argnum 交换格式字符串中的参数。

<?php
// 样本数组
$array = array("50", "United States");

// 定义格式字符串
$format = "The %2\$s is a federal republic of %1\$d states.";

//格式化并打印字符串
vprintf($format, $array);
?>

提示:如果格式字符串中的占位符或转换规范的顺序与数组中列出的参数的顺序不匹配。 您可以使用 argnum 轻松指示占位符引用哪些参数,并使函数代码保持原样。

以下示例仅演示了使用 printf() 函数对整数值使用不同格式说明符时可能产生的结果。

<?php
// 样本整数
$num1 = 123456789;
$num2 = -123456789;
$num3 = 65; // ASCII 65 is 'A'

// 注意双 %%,这只是打印一个 '%' 字符
printf("%%b = %b <br>", $num1); // Binary representation
printf("%%c = %c <br>", $num3); // The ASCII Character
printf("%%d = %d <br>", $num1); // Standard integer representation
printf("%%d = %d <br>", $num2); // Standard integer representation
printf("%%e = %e <br>", $num1); // Scientific notation (lowercase)
printf("%%E = %E <br>", $num1); // Scientific notation (uppercase)
printf("%%u = %u <br>", $num1); // Unsigned integer representation (positive)
printf("%%u = %u <br>", $num2); // Unsigned integer representation (negative)
printf("%%f = %f <br>", $num1); // Floating-point representation (locale aware)
printf("%%F = %F <br>", $num1); // Floating-point representation (non-locale aware)
printf("%%g = %g <br>", $num1); // Shorter of %e and %f
printf("%%G = %G <br>", $num1); // Shorter of %E and %f
printf("%%o = %o <br>", $num1); // Octal representation
printf("%%s = %s <br>", $num1); // String representation
printf("%%x = %x <br>", $num1); // Hexadecimal representation (lowercase)
printf("%%X = %X <br>", $num1); // Hexadecimal representation (uppercase)
printf("%%+d = %+d <br>", $num1); // Sign specifier (positive)
printf("%%+d = %+d <br>", $num2); // Sign specifier (negative)
?>

同样,以下示例显示了如何使用 s 说明符以各种方式格式化字符串。

<?php
$str1 = "Hello";
$str2 = "Hello Alexander!";

printf("[%s]<br>", $str1);     // Standard string output
printf("[%10s]<br>", $str1);   // Right-justifies the string with spaces
printf("[%-10s]<br>", $str1);  // Left-justifies the string value with spaces
printf("[%010s]<br>", $str1);  // Left-pads string with zeros.
printf("[%-010s]<br>", $str1); // Right-pads string with zeros
printf("[%'#10s]<br>", $str1); // Left-pads string with '#' character
printf("[%.10s]<br>", $str2);  // Cuts off string after 10 characters
?>
Advertisements