PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf

时间:2022-10-25 12:01:46
  • sscanf – 根据指定格式解析输入的字符
  • echo – 输出一个或多个字符串
  • print – 输出字符串
  • sprintf – 返回格式化字符串
  • vsprintf – 返回格式化字符串 (参数为数组)
  • printf – 直接输出格式化字符串
  • vprintf – 直接输出格式化字符串 (参数为数组)
  • fprintf – 将格式化后的字符串写入到流
  • vfprintf – 将格式化后的字符串写入到流 (参数为数组)

sscanf

根据指定格式解析输入的字符

mixed sscanf ( string $str , string $format [, mixed &$... ] )

这个函数 sscanf() 类似 printf()的输入版。 
sscanf() 读取字符串str 然后根据指定格式format解析, 格式的描述文档见 sprintf()。

注意

指定的格式字符串中的任意空白匹配输入字符串的任意空白.也就是说即使是格式字符串中的一个制表符 \t 也能匹配输入 字符串中的一个单一空格字符

示例

//不区分语言地区
<?php
$current_date = "2016年 1月 8日";
$var = sscanf($current_date, "%d%s %d%s %d%s");
var_dump($var);
/*
输出
array
0 => int 2016
1 => string '年' (length=2)
2 => int 1
3 => string '月' (length=2)
4 => int 8
5 => string '日' (length=2)
*/
?>
/*D 表示十进制数字.(%D 与 %d相同)
因为在PHP源码中'd'与'D'代码是一样的
case 'd':
case 'D':
op = 'i';
base = 10;
fn = (long (*)())strtol;
break;
*/
<?php
$hex = 0xFF;
$var = sscanf($hex, "%d");
var_dump($var);
/*
输出
array
0 => int 255
*/

//D 无法识别字符串中的16进制
$hex = "0xFF";
$var = sscanf($hex, "%d");
var_dump($var);
/*
输出
array
0 => int 0
*/
?>

// i 可以识别字符串中的16进制
<?php
$hex = "0xFF";
$var = sscanf($hex, "%i");
var_dump($var);
/*
输出
array
0 => int 255
*/
?>

//n 表示到目前为止的字符数,一个中文字符相当于两个英文字符
<?php
$number = "0123456789 八个字符";
$var = sscanf($number, "%s %n%s%n");
var_dump($var);
/*
输出
array
0 => string '0123456789' (length=10)
1 => int 11
2 => string '八个字符' (length=8)
3 => int 19
*/
?>

//传入参数
<?php
$name = "";
$age = 0;
$name_age = "zhangsan 19";
$num = sscanf($name_age, "%s %d", $name, $age);
var_dump($num); // int 2 (返回值为参数个数)
var_dump($name); // string 'zhangsan' (length=8)
var_dump($age); // int 19

echo

输出一个或多个字符串

void echo ( string $arg1 [, string $... ] )

//普通输出
echo "Hello World";

//下面两条,在网页中都是在一行显示,但是查看源文件的话,会看到是按格式输出的
echo "This spans
multiple lines. The newlines will be
output as well";

echo "This spans\nmultiple lines. The newlines will be\noutput as well.";

//转义双引号
echo "Escaping characters is done \"Like this\".";

//输出变量名 使用单引号
echo 'foo is $foo'; // foo is $foo

//输出变量值 使用双引号
$foo = "foobar";
echo "foo is $foo"; // foo is foobar

//输出数组中的元素
$baz = array("value" => "foo");
echo "this is {$baz['value']} !";// this is foo !
echo "this is $baz !"; // this is Array !

//输出多个变量
$foo = "foobar";
$bar = "barbaz";
echo $foo,$bar; //foobarbarbaz

//按格式输出多行
//仍然是在网页中都显示在一行,但是查看源文件的话,会看到是按格式输出的
echo <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon. no extra whitespace!
END;

//echo 与 print区别
$some_var = true;
($some_var) ? echo 'true' : echo 'false'; // PHP报错
($some_var) ? print 'true' : print 'false'; // true
//不过可以用另外一种写法
echo $some_var ? 'true': 'false';
?>

<?php
//因为是一个语言结构而不是一个函数,不能被 变量函数(variable functions) 调用。
$func = "strpos";
echo $func("0123456",'6'); // int 6

$func = "echo";
$func "123"; //PHP报错
?>

  

注意

echo 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以。 
echo (不像其他语言结构)没有表现得像一个函数, 所以不能总是被用在一个函数的上下文。 
另外,如果你想给echo 传递多个参数, 那么就不能使用小括号。

print

输出字符串

int print ( string $arg )

注意

print 实际上不是一个函数(它是一个语言结构),因此你不使用圆括号来括起它的参数列表也可以。

<?php
print("Hello World"); //Hello World
print "Hello World"; //Hello World

//在网页中显示在一行,但是查看源文件的话,会看到是按多行输出的可以
print "This spans
multiple lines. The newlines will be
output as well";

/*print基本与echo使用方法相同,处了echo 没有返回值,print 总是返回1以外
还有下面的区别,其他使用可以参见echo的使用*/
$some_var = true;
($some_var) ? echo 'true' : echo 'false'; // PHP报错
($some_var) ? print 'true' : print 'false'; // true
?>

  

sprintf

返回一个格式化字符串

string sprintf ( string $format [, mixed $args [, mixed $... ]] )
  • 1
  • 1

参数说明

format 
这个format字符串由零个或多个指令组成,普通字符(除了’%’)直接复制到返回值,规定的转换指令与参数一一对应。 
%% - 百分比符号 
%b - 二进制数 
%c - ASCII码字符 
%d - 带符号十进制数 
%e - 科学计数法 (e.g. 1.2e+2) 
%E - 科学计数法 (e.g. 1.2E+2) 
%f - 浮点数(locale aware) 
%F - 浮点数(non-locale aware, 看了PHP5.2的源码%F也调用了 localeconv()) 
%g - 较短的 %e 和 %f. 
%G - 较短的 %E 和 %f. 
%o - 八进制数 
%s - 字符串 
%u - 无符号十进制数 
%x - 十六进制(小写) 
%X - 十六进制(大写)

注意

组合字符串的宽度超过一个字节字符集字符可能会导致意想不到的结果 
(简单理解就是使用中文可能会出问题)

类型列表

类型 指令
string s
integer b,o,d,u,x,X,c
double g,G,e,E,f,F