sscanf() 函数
sscanf() 函数根据指定的格式解析来自字符串的输入。 sscanf() 函数基于格式字符串向变量中解析字符串。
如果只向该函数传递两个参数,数据将以数组的形式返回。
$str = "age:30 weight:60kg";
print_r(sscanf($str,"age:%d weight:%dkg")); // Array ( [0] => 30 [1] => 60 )
?>
否则,如果传递了额外的参数,则被解析的数据会存储在这些参数中。
$str = "age:30 weight:60kg";
sscanf($str,"age:%d weight:%dkg",$age,$weight);
echo $age; // 30
echo $weight; // 60
?>
如果区分符的数目大于包含它们的变量的数目,则会发生错误。
// 两个区分符,只有一个变量,提示错误
$str = "age:30 weight:60kg";
sscanf($str,"age:%d weight:%dkg",$age);
echo $age;
echo $weight;
// Warning: sscanf(): Different numbers of variable names and field specifiers in
// Notice: Undefined variable: weight in
?>
不过,如果区分符的数目小于包含它们的变量的数目,则额外的变量包含 NULL。
// 有2个区分符,3个变量
$str = "age:30 weight:60kg";
sscanf($str,"age:%d weight:%dkg",$age,$weight,$abc);
echo $age; // 30
echo $weight; // 60
echo $abc;
// 跟手册说的不一样,提示错误Warning: sscanf(): Variable is not assigned by any conversion specifiers in
?>
语法
sscanf(string,format,arg1,arg2,arg++)
string必需。规定要读取的字符串。
format 必需。规定要使用的格式。
可能的格式值:
%% - 返回一个百分号 %
%c - ASCII 值对应的字符
%d - 包含正负号的十进制数(负数、0、正数)
%e - 使用小写的科学计数法(例如 1.2e+2)
%u - 不包含正负号的十进制数(大于等于 0)
%f - 浮点数
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
附加的格式值。必需放置在 % 和字母之间(例如 %.2f):
+ (在数字前面加上 + 或 - 来定义数字的正负性。默认地,只有负数做标记,正数不做标记)
' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。)
- (左调整变量值)
[0-9] (规定变量值的最小宽度)
.[0-9] (规定小数位数或最大字符串长度)
注释:如果使用多个上述的格式值,它们必须按照上面的顺序使用。
arg1可选。存储数据的第一个变量。
arg2可选。存储数据的第二个变量。
arg++可选。存储数据的第三、四个变量,依此类推。
printf() 函数
printf() 函数输出格式化的字符串。
arg1、arg2、arg++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入到 % 符号之后,由数字和 "\$" 组成。请参见示例二。
示例一
使用格式值 %f
$number = 123;
printf("%f",$number); // 123.000000
?>
示例二
使用占位符
$number = 123;
printf("有两位小数:%1\$.2f
没有小数:%1\$u",$number); // 1\$是一个占位符,因为用到2次,所以需要用占位符
// 有两位小数:123.00
// 没有小数:123
?>
示例三
所有可能的格式值的演示
$num1 = 123456789;
$num2 = -123456789;
$char = 50; // ASCII 字符 50 是 2
// 注释:格式值 "%%" 返回百分号
printf("%%b = %b
",$num1); // 二进制数 %b = 111010110111100110100010101
printf("%%c = %c
",$char); // ASCII 字符 %c = 2
printf("%%d = %d
",$num1); // 带符号的十进制数 %d = 123456789
printf("%%d = %d
",$num2); // 带符号的十进制数 %d = -123456789
printf("%%e = %e
",$num1); // 科学计数法(小写) %e = 1.234568e+8
printf("%%E = %E
",$num1); // 科学计数法(大写) %E = 1.234568E+8
printf("%%u = %u
",$num1); // 不带符号的十进制数(正)%u = 123456789
printf("%%u = %u
",$num2); // 不带符号的十进制数(负)%u = 4171510507
printf("%%f = %f
",$num1); // 浮点数(视本地设置) %f = 123456789.000000
printf("%%F = %F
",$num1); // 浮点数(不视本地设置) %F = 123456789.000000
printf("%%g = %g
",$num1); // 短于 %e 和 %f %g = 1.23457e+8
printf("%%G = %G
",$num1); // 短于 %E 和 %f %G = 1.23457E+8
printf("%%o = %o
",$num1); // 八进制数 %o = 726746425
printf("%%s = %s
",$num1); // 字符串 %s = 123456789
printf("%%x = %x
",$num1); // 十六进制数(小写) %x = 75bcd15
printf("%%X = %X
",$num1); // 十六进制数(大写) %X = 75BCD15
printf("%%+d = %+d
",$num1); // 符号说明符(正) %+d = +123456789
printf("%%+d = %+d
",$num2); // 符号说明符(负) %+d = -123456789
?>
示例四
字符串说明符的演示
$str1 = "Hello";
$str2 = "Hello world!";
printf("[%s]
",$str1); // [Hello]
printf("[%8s]
",$str1); // [ Hello] // 不明白
printf("[%-7s]
",$str1); // [Hello ] // 不明白
printf("[%08s]
",$str1); // [000Hello]
printf("[%'*8s]
",$str1); // [***Hello]
printf("[%8.8s]
",$str2); // [Hello wo] // 不明白
?>
fprintf() 函数
fprintf() 函数把格式化的字符串写入指定的输出流(例如:文件或数据库)。(其他与printf一样)
arg1、arg2、arg++ 参数将被插入主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入到 % 符号后面,由数字和 "\$" 组成。
$number = 123;
$file = fopen("test.txt","w");
fprintf($file,"%f",$number);
// 123.000000被写入到文件 "test.txt"
?>
sprintf() 函数
sprintf() 函数把格式化的字符串写入变量中。(其他与printf一样)
arg1、arg2、++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符位于 % 符号之后,由数字和 "\$" 组成。
// 把格式化的字符串写入变量$txt中
$number = 123;
$txt = sprintf("%f",$number);
echo $txt; // 123.000000
?>
vfprintf() 函数
vfprintf() 函数把格式化的字符串写到指定的输出流(例如:文件或数据库)。
与 fprintf() 不同,vfprintf() 中的参数位于数组中。数组元素将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入第一个数组元素,在第二个 % 符号处,插入第二个数组元素,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入到 % 符号之后,由数字和 "\$" 组成。<?php
$num1 = 123;
$num2 = 456;
$file = fopen("test.txt","w");
vfprintf($file,"%f%f",array($num1,$num2));
// 123.000000456.000000文本写入到文件"test.txt"中
?>
vprintf() 函数
vprintf() 函数输出格式化的字符串。
与 printf() 不同,vprintf() 中的参数位于数组中。数组元素将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入第一个数组元素,在第二个 % 符号处,插入第二个数组元素,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入到 % 符号之后,由数字和 "\$" 组成。<?php
$num1 = 123;
$num2 = 456;
vprintf("%f%f",array($num1,$num2));
// 123.000000456.000000
?>
vsprintf() 函数
vsprintf() 函数把格式化字符串写入变量中。
与 sprintf() 不同,vsprintf() 中的参数位于数组中。数组元素将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入第一个数组元素,在第二个 % 符号处,插入第二个数组元素,依此类推。
注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入到 % 符号之后,由数字和 "\$" 组成。<?php
$num1 = 123;
$num2 = 456;
$txt = vsprintf("%f%f",array($num1,$num2));
echo $txt; // 123.000000456.000000
?>