printf()函数优点在于可以格式化输出
格式:
%['padding_character][-][width][.precision]type
所有的转换说明都是以%开始,如果想打印一个%符号,必须用%% ;
参数“'padding_character”是可选,它将被用来填充变量直至所指定的宽度,该参数的作用就在变量前面填充,默认的填充字符是一个空格,如果指定“0”或者“ ”(空格),就不需要“'”单引号作为前缀,其他字符就必须指定“'”作为前缀;
参数“-”是可选,它指左对齐,默认是右对齐;
参数“width”是指被替换的变量的长度;
参数“.precision”表示以小数点开始,它指明小数点后要显示的位数;
参数“type”是类型码,请看下表:
类型 | 含义
b | 解释为整数并作为二进制输出
c | 解释为整数并作为字符表示输出(ASCII码)
d | 解释为整数并作为整数输出
f | 解释为双精度并作为浮点数输出
o | 解释为整数并作为八进制数输出
s | 解释为字符串并为字符串输出
u | 解释为整数并作为非指定小数输出
x | 解释为整数并作为带有小写字母a-f的十六进制数输出
X | 解释为整数并作为带有大写字母A-F的十六进制数输出
示例:
<?php
$out = "The Books\n";
$books = array("Book 1", "Book 2", "Book 3");
$pages = array("123 pages ", "234 pages", "345 pages");
for ($i = 0; $i < count($books); $i++) {
//第一个变量左对齐,宽度20,不足长度使用.号填充;第二个变量右对齐,宽度为7,左截取4个字符,不足使用.号对齐
$out .= sprintf("%'.-20s%'.7.4s\n", $books[$i], $pages[$i]);
}
echo $out;
// Outputs:
//
// The Books
// Book 1.................123
// Book 2.................234
// Book 3.................345
$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
?>
测试结果:
The Books
Book 1.................123
Book 2.................234
Book 3.................345
[monkey] [ monkey] [monkey ] [0000monkey] [####monkey] [many monke]
sprintf()的用法和printf()完全一致,只是sprintf()将返回格式化的结果,并不直接输出结果。