详细的可以参考官方文档:https://www.php.net/manual/zh/function.printf.php
printf() 是 PHP 中的一个内置函数,用于格式化并输出字符串。它类似于 C 语言中的 printf 函数,可以将变量插入到字符串中,并按照指定的格式进行输出。printf() 函数在多种场景中都非常有用,特别是在需要精确控制输出格式的情况下。
1. printf() 的用途
1.1 格式化输出
printf() 允许你将变量插入到字符串中,并按照指定的格式进行输出。
这对于生成格式化的文本、日志记录、调试信息等非常有用。
1.2 控制输出精度
你可以使用 printf() 来控制浮点数的精度、日期和时间的格式等。
2. 使用场景
2.1 日志记录
在日志文件中记录带有格式的信息,例如时间戳、错误代码等。
<?php
$logFile = fopen('log.txt', 'a');
$timestamp = date('Y-m-d H:i:s');
$errorMessage = 'An error occurred';
fprintf($logFile, "[%s] %s\n", $timestamp, $errorMessage);
fclose($logFile);
?>2.2 调试信息
在调试过程中,输出带有格式的变量值。
<?php
$number = 123.456789;
printf("The number is: %.2f\n", $number); // 输出: The number is: 123.46
?>2.3 生成报告
生成格式化的报告,例如财务报表、统计报告等。
<?php
$name = "John Doe";
$amount = 1234.56;
printf("Name: %-20s Amount: %10.2f\n", $name, $amount);
// 输出: Name: John Doe Amount: 1234.56
?>3. 底层原理
3.1 格式化字符串
printf() 接受一个格式化字符串作为第一个参数,该字符串包含普通字符和格式化指令。
格式化指令以 % 开头,后面跟着一个或多个字符,指定如何格式化后续的参数。
3.2 格式化指令
常见的格式化指令包括:
%d 或 %i:整数
%f:浮点数
%s:字符串
%c:字符
%e:科学计数法表示的浮点数
%u:无符号整数
%.n:指定小数点后的位数
%-n:左对齐
%+n:右对齐
3.3 参数替换
printf() 会按照格式化字符串中的指令顺序,依次替换后续的参数。
例如,printf("Name: %s, Age: %d", $name, $age) 会将 $name 替换到第一个 %s,将 $age 替换到第一个 %d。
4. 示例代码
4.1 基本用法
<?php
$name = "Alice";
$age = 30;
printf("Name: %s, Age: %d\n", $name, $age);
// 输出: Name: Alice, Age: 30
?>4.2 浮点数格式化
<?php
$number = 123.456789;
printf("The number is: %.2f\n", $number);
// 输出: The number is: 123.46
?>4.3 字符串对齐
<?php
$name = "Bob";
$amount = 1234.56;
printf("Name: %-20s Amount: %10.2f\n", $name, $amount);
// 输出: Name: Bob Amount: 1234.56
?>5. 注意事项
格式化字符串:确保格式化字符串中的指令数量与后续参数的数量匹配,否则会导致错误。
性能:在高频率输出的场景中,考虑性能影响,避免过度使用 printf()。
安全性:避免在格式化字符串中使用用户输入,以防止格式字符串注入攻击。
总结
printf() 函数在 PHP 中用于格式化并输出字符串,特别适用于需要精确控制输出格式的场景,如日志记录、调试信息和生成报告。通过理解格式化指令和参数替换的机制,你可以灵活地使用 printf() 来满足各种需求。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_36777143/article/details/143740676
在PHP中,printf是一个用于格式化输出的函数。它接受一个格式字符串作为参数,并根据格式字符串中的占位符来替换相应的值。printf函数可以用于将变量的值以指定的格式输出到屏幕或文件中。
printf函数的格式字符串可以包含普通的文本字符和特殊的格式占位符。格式占位符以百分号(%)开头,后面跟着一个或多个格式指示符,用于指定输出的格式。常用的格式指示符包括:
%s:用于输出字符串。
%d或%i:用于输出整数。
%f:用于输出浮点数。
%c:用于输出字符。
%b:用于输出二进制数。
%o:用于输出八进制数。
%x或%X:用于输出十六进制数。
%e或%E:用于输出科学计数法表示的浮点数。
%u:用于输出无符号整数。
除了格式指示符,格式字符串还可以包含其他控制字符,如转义字符(\n表示换行)、制表符(\t表示制表符)等。
使用printf函数可以方便地控制输出的格式,使输出更加清晰易读。它在PHP中被广泛应用于调试和日志记录等场景。
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的十六进制数输出
演示:
---------------------------------------------------------------------------------------------
$str = "0758 jian";
$strA = "A";
$strB = "B";
$num1 = 5;
$num2 = 5;
$num3 = 0.25;
$num4 = 3.2567;
$num5 = 8;
$num6 = 1.735;
$num7 = 16777215;
$num8 = 16777215;
printf("%2\$s %1\$s", $strA, $strB); // 2\$是指定参数位置
echo '
';
printf("填充: %'%10s", $str); //指定填充符为%字符串宽度为10
echo '
';
printf("二制制: %b", $num1);
echo '
';
printf("ASCII码: %c", $num2);
echo '
';
printf("整数: %d", $num3);
echo '
';
printf("浮点数: %.2f", $num4);
echo '
';
printf("八进制: %o", $num5);
echo '
';
printf("字符串: %s", $str);
echo '
';
printf("非小数: %u", $num6);
echo '
';
printf("十六进制: %x", $num7);
echo '
';
printf("十六进制: %X", $num8);
?>
---------------------------------------------------------------------------------------------
输出结果:
---------------------------------------------------------------------------------------------
B A 填充: %0758 jian 二制制: 101 ASCII码: 整数: 0 浮点数: 3.26 八进制: 10 字符串: 0758 jian 非小数: 1 十六进制: ffffff 十六进制: FFFFFF
今天给大家带来一篇深入剖析php中printf()函数格式化使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望对大家有所帮助。
printf()函数优点在于可以格式化输出!
printf的格式控制的完整格式:
% - 0 m.n l或h 格式字符
下面对组成格式说明的各项加以说明:
立即学习“PHP免费学习笔记(深入)”;
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
---------------------------------------
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。
例:
main()
{ int a = -1;
printf("%d, %o", a, a);
}运行结果:-1,177777
程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。
③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。
④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
---------------------------------------
关于printf函数的进一步说明:
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
输出0.333333%。
---------------------------------------
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.
对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.
printf 是 PHP 中用于格式化字符串的一个函数
%s- 字符串格式 用法:printf("%s", "Hello, World!");输出:Hello, World!%d- 十进制整数格式 用法:printf("%d", 42);输出:42%f- 浮点数格式 用法:printf("%f", 3.14);输出:3.140000%e- 科学计数法表示的浮点数格式 用法:printf("%e", 2.71828);输出:2.718280e+00%x- 十六进制表示的整数格式 用法:printf("%x", 255);输出:ff%o- 八进制表示的整数格式 用法:printf("%o", 10);输出:12%b- 二进制表示的整数格式 用法:printf("%b", 10);输出:1010%c- 字符格式 用法:printf("%c", 65);输出:A%u- 无符号十进制整数格式 用法:printf("%u", 4294967295);输出:4294967295%I- 无符号八进制整数格式 用法:printf("%I", 10);输出:12%o- 无符号八进制整数格式(与%u类似,但用于八进制) 用法:printf("%o", 10);输出:12%x- 无符号十六进制整数格式 用法:printf("%x", 4294967295);输出:ffffffff%X- 无符号十六进制整数格式(大写字母) 用法:printf("%X", 4294967295);输出:FFFFFFFF%p- 指针格式 用法:$ptr = (int*)0x12345678; printf("%p", $ptr);输出:0x12345678%%- 百分比符号格式 用法:printf("%%s", "Hello, World!");输出:%s
这些格式化选项可以组合使用,例如:printf("%d %f %e", 42, 3.14, 2.71828);,输出:42 3.140000 2.718280e+00