我正在研究关于printf,sprintf而且我没有理解几点,如果有人可以帮我理解这些要点,
在此PHP Manual的链接:
有解释从1到6编号:
我不明白的是:第一个和第二个(1个(符号说明符),2个(填充说明符)),如果有人可以帮我举个例子,我会非常感激。
答案 0 :(得分:30)
sprintf()返回一个字符串,printf()显示它。
以下两个是平等的:
printf(currentDateTime());
print sprintf(currentDateTime());
答案 1 :(得分:12)
符号说明符会强制使用符号,即使它是正数。所以,如果你有
$x = 10;
$y = -10;
printf("%+d", $x);
printf("%+d", $y);
你会得到:
+10
-10
填充说明符添加左边距,以便输出总是占用一定数量的空格,这样就可以对齐一堆数字,在生成带总计的报告时很有用。
$x = 1;
$y = 10;
$z = 100;
printf("%3d\n", $x);
printf("%3d\n", $y);
printf("%3d\n", $z);
你会得到:
1
10
100
如果在填充说明符前加零,则字符串将为零填充而不是填充空格:
$x = 1;
$y = 10;
$z = 100;
printf("%03d\n", $x);
printf("%03d\n", $y);
printf("%03d\n", $z);
给出:
001
010
100
答案 2 :(得分:2)
符号说明符:放置加号(+)会强制显示负和正符号(默认情况下仅指定负值)。
$n = 1;
$format = 'With sign %+d without %d';
printf($format, $n, $n);
打印:
标志+1没有1
填充说明符表示将使用什么字符将结果填充到指定的长度。通过在前面添加单引号(')来指定字符。例如,使用字符“a”填充长度为3:
$n = 1;
$format = "Padded with 'a' %'a3d"; printf($format, $n, $n);
printf($format, $n, $n);
打印:
填充'a'aa1
答案 3 :(得分:0)
1.Sign说明符:
默认情况下,浏览器仅在负数前显示-
符号。省略了正数前面的+
符号。但是可以通过使用符号说明符指示浏览器在正数字前面显示+
符号。例如:
$num1=10;
$num2=-10;
$output=sprintf("%d",$num1);
echo "$output<br>";
$output=sprintf("%d",$num2);
echo "$output";
输出:
10
-10
这里省略了正数之前的+
符号。但是,如果我们在+
%
字符之后添加%d
符号,则不再发生遗漏。
$num1=10;
$num2=-10;
$output=sprintf("%+d",$num1);
echo "$output<br>";
$output=sprintf("%+d",$num2);
echo "$output";
输出:
+10
-10
2.Padding说明符:
填充说明符在输出的左侧或右侧添加一定数量的字符。字符可以是空格,零或任何其他ASCII字符。
例如,
$str="hello";
$output=sprintf("[%10s]",$str);
echo $output;
源代码输出:
[ hello] //Total length of 10 positions,first five being empty spaces and remaining five being "hello"
HTML输出:
[ hello] //HTML displays only one empty space and collapses the rest, you have to use the <pre>...</pre> tag in the code for HTML to preserve the empty spaces.
在输出上放置一个负号:
$output=["%-10s",$string];
echo $output;
源代码输出:
[hello ]
HTML输出:
[hello ]
在0
符号后面放置%
会将空格替换为零。
$str="hello";
$output=sprintf("[%010s]",$str);
echo $output;
输出:
[00000hello]
左对齐
$output=sprintf("[%-010s]",$str);
输出:
[hello00000]
在'
之后将*
后跟任何ASCII字符(如%
)导致显示该ASCII字符而不是空格
$str="hello";
$output=sprintf("[%'*10s]",$str);
echo $output;
输出:
*****hello
左对齐:
$output=sprintf("[%-'*10s]",$str);
echo $output;
输出:
hello*****