PHP sprintf() 函数

先说下为什么要写这个函数的前言,这个是我在微信二次开发的一个token验证文档也就是示例文档看到的一个函数,当时非常不理解,于是查了百度,但是很多结果都很笼统,结果也很少,后来查阅了3c和问了公司的一些人做了一些测试慢慢懂了一些,一下就是我对sprintf函数的个人见解

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

用于:处理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位出来,所以又空缺了两个,所以左边开始扩充两个空位,为什么只显示一个空格上一段说了,再说一次吧扩充再多也只显示一个空格位置。默认从左边开始

相信已经透彻的讲了,已经没有能够浓缩的地方了,有什么不懂可以留言,一般常在,尽量帮你解决,伸出小手点个赞,谢谢

sprintf函数php的详细使用方法的更多相关文章

  1. vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置

    vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置 [转载自]tinyle的专栏 [原文链接地址]http://blog.csdn.net/myaccella/ar ...

  2. opencv3.2.0实现读取多张图片的方法(利用sprintf()函数)

    简介: 将连续的图片转换成视频时,首先需要把图片全部读入,然后再做相应处理,该程序利用sprintf()函数,实现连续图片的读入 /*********新建QT控制台程序,实现多张连续图片的读取**** ...

  3. sprintf()函数的用法

    Visual C++ sprintf()函数用法 转:http://blog.csdn.net/masikkk/article/details/5634886 在将各种类型的数据构造成字符串时,spr ...

  4. DATEADD和DATEDIFF函数、其他日期处理方法 、已打开的端口、FORMAT函数

    DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.FORMAT函数 DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.Format函数 KeyLife富翁笔 ...

  5. arduino上使用sprintf()函数输出float值出错

    如果尝试使用sprintf()函数在arduino上进行对float指转换为一个字符串的话,你会发现,it doesn't work.弄了很久,还以为是没学c++的原因.其实在arduino上,这个函 ...

  6. ThinkPHP函数详解:D方法

    从本篇开始,我们会陆续给大家详细说明下框架内置函数的用法. D方法 D方法应该是用的比较多的方法了,用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持 ...

  7. [转]PHP echo, print, printf, sprintf函数的区别和使用

    1. echo函数: 输出函数,是命令,不能返回值.echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo 1,2,$myvar,"<b>bol ...

  8. 转:Visual C++ sprintf()函数用法

    将字串格式化命令.sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访 问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情 ...

  9. C++中对sprintf()函数的说明(转)

    在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出 ...

随机推荐

  1. careercup-中等难度 17.8

    17.8 给定一个整数数组(有正数和负数),找出总和最大的连续序列,并返回总和. 解法: 就是求连续子序列的和最大,不过存在一个问题: 假设整个数组都是负数,怎么样才是正确的行为呢?看看这个简单的数组 ...

  2. careercup-中等难度 17.6

    17.6 给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的.注意:n越小越好,也就是说,找出符合条件的最短序列. 解法: 开始解题之前,让我们先确认一下 ...

  3. [JavaScript]JS对select动态options操作[IE&FireFox兼容]

    <select id="ddlResourceType" onchange="getvalue(this)"></select>     ...

  4. 《RESTful Web Services》第四章 设计URI

    引言 URI是跨越Web的资源描述符,一个URI由以下内容组成——协议.主机.端口号.路径

  5. Helpers Overview

    Helpers Overview Helpers are classes that are not part of the core system but can greatly improve it ...

  6. 设定范围和步长的递增数验证器Validator

    1.接口注释 @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Docume ...

  7. 有关于Algorithm的基础介绍

    Niklaus Wirth:Algorithm + Data Structures = Programs 这句话呢,觉得很正确,算法和程序是不同的概念,算法的思想呢有递推,枚举,分治,贪婪,试探法,模 ...

  8. 虚拟机Linux系统中安装SYNOPSYS工具图解教程

                                        V TRON KO 2.8.2 启动 dv 在终端运行命令: lmli2 然后再运行命令: dv V TRON KO V TRO ...

  9. Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  10. windows server 2012R2 网络慢的那些事

    前段时间公司新采购了一台ibm的服务器,装的是 windows server 2012R2, 在做完项目迁移后,发现项目访问数据库缓慢,于是逐项查找原因,最后终于找到解决办法 以Administrat ...