Part1:实例

 $filterfile = basename(PHP_SELF, '.php');
if (isset($_GET['uselastfilter']) && isset($_COOKIE['ECSCP']['lastfilterfile']) && $_COOKIE['ECSCP']['lastfilterfile'] == sprintf('%X', crc32($filterfile)))
{
  return array(
          'filter' => unserialize(urldecode($_COOKIE['ECSCP']['lastfilter'])),
          'sql' => base64_decode($_COOKIE['ECSCP']['lastfiltersql'])
         );
}

上面是get_filter()函数重要的一部分

crc32 — 计算一个字符串的 crc32 多项式

说明

  int crc32 ( string $str )

  生成 str 的 32 位循环冗余校验码多项式。这通常用于检查传输的数据是否完整。

Warning
  由于 PHP 的整数是带符号的,所以在 32 位系统上许多 crc32 校验码将返回负整数。 尽管在 64 位上所有 crc32() 的结果将都是正整数。

  因此你需要使用 sprintf() 或 printf() 的"%u"格式符来获取表示无符号 crc32 校验码的字符串。

参数

  str
  要校验的数据。

返回值

  返回 str crc32 校验的整数。

解编码函数详解:php分页

 

Part2:sprintf详解

sprintf — Return a formatted string

说明

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

  Returns a string produced according to the formatting string format.

用处:把字符串进行多种类型的格式化

用于:处理xml数据格式时,需要用到他来格式化等等

基本语法格式:sprintf("%格式化类型","$str1","$str2") ;先别急我会一个个慢慢说

先看一下类型参照表,也就是要转换成什么类型的格式

这是转换格式的类型参照表

先举个最简单的案例

<?php
$str1="1234";
echo sprintf("hello%s","$str1");//效果为: hello1234
?>

这什么意思呢

要点:

%s = %符号和后面属性符号(s)总称为插入标记组合,也就是把后面准备进行格式化的值($str1)替换在这个位置

hello = 这个单词就是很多人蒙蔽的地方,告诉你这个什么代表也没有,就单纯的代表一个hello,用于分割或者修饰用,一般用[ %s ]、<%s>这样格式化出来后就直接在标签里

记住,一个%标记符后面只有一个类型属性(比如s),s是什么上面有,以字符串的方式格式化

那么多个值怎么格式化一起呢

<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("%1\$s%2\$s",$c,$a);//效果为: 1234abcdef
?>

%s为一个标记,两个%s%s这样写却是错误的,每个%s必须标记键位,不然我怎么知道都代表格式化后面的哪个$str呢,所以有个特别的语法

%1\$%2\$      解释:%1表示格式化sprintf("%1\$%2\$",''$str1","$str2")中对应的$str1,那么%2自然表示格式化$str2,\$是代表有多个值准备格式化,所以每个%1和%2或者还有%3的标记后都要加这个符号代表一行中有多个标记,如果只有一个标记就不用\$了占位符了,记住$str2、$str3是可选,也就是可以不格式化这么多

讲个特殊的例子

<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("%'x13.2f",$c);// 效果为:xxxxxx1234.00
//echo sprintf("%06.2f", $a);
?>

sprintf("%'x13.2f",$c);

这是什么意思,f是浮点数,第一步按照格式 %   '(补位值) 宽度值  格式化类型  这三部分,语法之间必须紧挨着不能用空格

必须解释一下何为补位值:就是设定的宽度超出了,用这个值来填上

解释一下,补位值只有设置宽度超出了目标值才能用

所以就是用x补位,13为总宽度,2为小数点后的宽度,f为格式化类型,别急我会解释

' 号(单引号)代表接下来要用补位类型

为什么他能识别x是补位值呢,因为前面有 ' 号,

为什么他能识别哪几位是哪种类型呢,他是这样识别的,按顺序从先从两头的字符开始识别是什么类型,补位值肯定是单数位,不可能一个位置补两个数吧,所以左边第一位x是补位值,右边第一位是格式化类型,然后中间的自然是宽度值

第二,为什么小数点 后还有一个属性 ,因为这是f(浮点型),必须设置小数点后有几位,不能小数后面不能设置了吧,那浮点数意义何在呢

不要觉得烦,每个例子都是浓缩出来的

整数补位

<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("%'07s",$c);
//结果是:0001234
?>

这就是整数补位,还是一样
第一步按照格式 %   '(补位值) 宽度值  格式化类型  这三部分

0是补位值 7是宽度值 s自然是格式化类型

还有一种最重要的例子

<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("[%-6s]",$c); //结果是:[1234 ]
echo sprintf("[%-4s]",$c); //结果是:[1234]
echo sprintf("[%4.2s]",$c); //结果是:[ 12]
?>

这个第一步 [ ] 仅仅只是修饰,不用理解

第二步,没有 ' 号,证明没有补位,无需添加补位值

所以语法格式为 : %    宽度值  格式化类型  这两部分

第一二行解释如下:

第一个宽度为6,但是$c=1234 ,只有4个字符,所以宽度不够,所以右边自动扩充(扩充再多也只显示一个空格位置),为什么在右边扩充,因为宽度前有个 - 号,代表补位方向相反,如在补位值前加-,自然从右边开始补位

下面为什么没变化,因为宽度正好一致,只是补位的方向改变了

第三行解释如下:

不要被蒙蔽了,语法结构还是一样    %    宽度值  格式化类型  这两部分

没有 ' 号,证明没有补位,无需添加补位值

所以4.2依旧是宽度值

只是小数点左边的4代表总宽度,右边的2代表只显示2位出来,所以又空缺了两个,所以左边开始扩充两个空位,为什么只显示一个空格上一段说了,再说一次吧扩充再多也只显示一个空格位置。默认从左边开始

Part3:输出格式转换函数

  printf 、 vprintf 、 sprintf 、vsprintf 、fprintf 、vfprintf 的各自的区别

  1)printf - 输出格式化字符串

    int printf ( string $format [, mixed $args [, mixed $... ]] )  

    依据 format 格式参数产生输出。

   参数

    format

   format 描述信息,请参见 sprintf()

      args 
      ...

 返回值

      返回输出字符串的长度。

  2)vprintf — 输出格式化字符串

    int vprintf ( string $format , array $args )

    根据 formatsprintf() 函数文档中有相关描述)参数指定的格式,在一个格式化字符串中显示多个值。

    作用与 printf() 函数类似,但是接收一个数组参数,而不是一系列可变数量的参数。

     参数

       format

  关于 format 的描述,参见 sprintf()

     args

   返回值

    返回输出字符串的长度。

  3)sprintf - Return a formatted string  格式化函数中用到最多的

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

    见Part2

  

 //Example #7 printf(): various examples

 <?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A' // notice the double %%, this prints a literal '%' character
printf("%%b = '%b'\n", $n); // binary representation
printf("%%c = '%c'\n", $c); // print the ascii character, same as chr() function
printf("%%d = '%d'\n", $n); // standard integer representation
printf("%%e = '%e'\n", $n); // scientific notation
printf("%%u = '%u'\n", $n); // unsigned integer representation of a positive integer
printf("%%u = '%u'\n", $u); // unsigned integer representation of a negative integer
printf("%%f = '%f'\n", $n); // floating point representation
printf("%%o = '%o'\n", $n); // octal representation
printf("%%s = '%s'\n", $n); // string representation
printf("%%x = '%x'\n", $n); // hexadecimal representation (lower-case)
printf("%%X = '%X'\n", $n); // hexadecimal representation (upper-case) printf("%%+d = '%+d'\n", $n); // sign specifier on a positive integer
printf("%%+d = '%+d'\n", $u); // sign specifier on a negative integer
?> /**以上例程会输出: %b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
**/ //Example #8 printf(): string specifiers <?php
$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
?> /*以上例程会输出:
[monkey]
[ monkey]
[monkey ]
[0000monkey]
[####monkey]
[many monke]
*/ //Example #9 sprintf(): zero-padded integers <?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?> //Example #10 sprintf(): formatting currency <?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted will output "123.10"
?> //Example #11 sprintf(): scientific notation <?php
$number = 362525200; echo sprintf("%.3e", $number); // outputs 3.625e+8
?>

  4)vsprintf — 返回格式化字符串

    string vsprintf ( string $format , array $args )

    作用与 sprintf() 函数类似,但是接收一个数组参数,而不是一系列可变数量的参数。

   参数

    format

 关于 format 的描述,参见 sprintf()

    args

   返回值

    根据 formatsprintf() 函数文档中有相关描述)参数指定的格式,在一个字符串中返回一系列值。

 <?php
print vsprintf("%04d-%02d-%02d", explode('-', '1988-8-1')); // 1988-08-01
?>

  5)fprintf — 将格式化后的字符串写入到流

    int fprintf ( resource $handle , string $format [, mixed $args [, mixed $... ]] )

    写入一个根据 format 格式化后的字符串到 由 handle 句柄打开的流中。

   参数

    handle

   文件系统指针,是典型地由 fopen() 创建的 resource(资源)。

    format

   参见 sprintf() 中对 format 的描述。

    args 
    ...

   返回值

      返回写入的字符串长度。

 //formatting currency
<?php
if (!($fp = fopen('currency.txt', 'w'))) {
return;
} $money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$len = fprintf($fp, '%01.2f', $money);
// will write "123.10" to currency.txt echo "wrote $len bytes to currency.txt";
// use the return value of fprintf to determine how many bytes we wrote
?>

  6)vfprintf — 将格式化字符串写入流

    int vfprintf ( resource $handle , string $format , array $args )

    向由 handle 指定的流资源句柄中写入根据 format 格式化后的字符串。

    作用与 fprintf() 函数类似,但是接收一个数组参数,而不是一系列可变数量的参数。

   参数

      handle 
      format

    关于 format 的描述,参见 sprintf()

      args

   返回值

      返回输出字符串的长度。

 <?php
if (!($fp = fopen('date.txt', 'w')))
return; vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// 将向 date.txt 写入格式化的 ISO 标准日期
?>

Part4:面试题

  网上找的的一个面试题

说出echo、print、print_r、printf、sprintf之间的区别

1:echo:是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。

2:print:是语句不是函数,有返回值 1 ,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。

3:print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值

4:printf:是函数,把文字格式化以后输出

5:sprintf:是函数,跟printf相似,但不打印,而是返回格式化后的文字(该函数把格式化的字符串写写入一个变量中,而不是输出来),其他的与printf一样。

例如:

1 $str = "Hello";
2 $number = 123;
3 $txt = sprintf("%s world. Day number %u",$str,$number);
4 //输出: Hello world. Day number 123
6:var_dump():函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。

可以通过function_exists('函数名称')进行测试

  var_dump(function_exists('print')); //bool(false)
var_dump(function_exists('echo')); //bool(false)
var_dump(function_exists('print_r')); //bool(true)

实例-sprintf() 函数详解-输出格式转换函数的更多相关文章

  1. SQL语句函数详解__sql聚合函数

    函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:单行函数.组函数 本文将讨论如何使用单行函数及 ...

  2. Pythonh中的zip()与*zip()函数详解

    前言 实验环境: Python 3.6: 示例代码地址:下载示例: 本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables)函数详解 ...

  3. linux select函数详解

    linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...

  4. Python中的zip()与*zip()函数详解

    前言 实验环境: Python 3.6: 示例代码地址:下载示例: 本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables)函数详解 ...

  5. 常用socket函数详解

    常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...

  6. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  7. mybatis中的mapper接口文件以及selectByExample类的实例函数详解

    记录分为两个部分,第一部分主要关注selectByExample类的实例函数的实现:第二部分讨论Mybatis框架下基本的实例函数. (一)selectByExample类的实例函数的实现 当你启动项 ...

  8. Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

  9. 【C语言】printf函数详解

    C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...

随机推荐

  1. 深入了解java虚拟机(JVM) 第十章 字节码指令

    一.字节码指令的含义 Java字节码指令由一个字节长度的,代表某种特定操作含义的数字(操作码)以及其后的零至多个代表此操作所需参数(操作数).此外字节码指令是面向操作数栈的,这里操作数栈在功能上对应实 ...

  2. Working with Metal—Overview

    看完这个 WWDC 之后的总结. Metal 可以在单位时间内提供 10 倍的 draw call 调用. Background About Draw Call 每一次 draw call 调用都必须 ...

  3. XMPPFramework核心类介绍

    XMPPFramework结构 在进入下一步之前,先给大家讲讲XMPPFramework的目录结构,以便新手们更容易读懂文章.我们来看看下图: 虽然这里有很多个目录,但是我们在开发中基本只关心Core ...

  4. jersey annotations

    参照: http://blog.csdn.net/a19881029/article/details/43056429 官网文档翻译版 @Path 用来为资源类或方法定义URI,当然除了静态URI也支 ...

  5. Access to the path ‘’ is denied

    2019/4/29 问题:利用VS实现数据导出,出现Error:Access to the path 'F:\HPYMTotalCode\Web\dd\xmqjd.xls' is denied. 原因 ...

  6. 初入Android Studio的我

    最近由于工作上的需要,领导让我去学点Android  以前因为兴趣的原因也自己搞过一点点  所以就欣然领命了 那么在此之前 我们来了解一下什么是Android 这是链接 自己去看吧 哈哈哈 https ...

  7. Xamarin Mono For Android 4.6.07004看不到新建android

    有很多朋友安装了Xamarin Mono For Android 4.6.07004看不到新建android项目 PS 官方安装包有BUG,在某些情况下可能会出现丢失VS插件的情况 (遇到此BUG请下 ...

  8. Yii 使用Widge面面观

    我们可以把Widget视为一个嵌入到控制器管理 的视图中的微控制器,其实就是.net框架中的用户控件,或者类似于.net MVC中的子视图.与controller相比较,微件没有既没有动作,也没有过滤 ...

  9. 在Windows Server 2008 R2(x64)上安装.NET Framework 4.5 兼谈.NET Framework 4.0 “在服务器核心角色上不受支持”含义

    完成了一个服务器文件监控系统,该系统的核心是一个Windows服务,需要安装在服务器上.由于是Visual Studio 2012开发,为了保证开发的Windows服务可以运行,必须在Windows服 ...

  10. spring boot快速入门 1 :创建项目、 三种启动项目方式

    准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...