当前位置:首页 > PHP教程 > php应用 > 列表

PHP sprintf() 函数使用方法详解

发布:smiling 来源: PHP粉丝网  添加日期:2014-03-12 13:29:32 浏览: 评论:0 

我们知道sprintf() 函数把格式化的字符串写写入一个变量中,我们经常会看到这类代码了,下面我来介绍sprintf() 函数使用方法,有需要的朋友可参考参考.

用法

sprintf(format,arg1,arg2,arg++)

说明

参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束.下面的可能的 format 值:

•%% - 返回百分比符号

•%b - 二进制数

•%c - 依照 ASCII 值的字符

•%d - 带符号十进制数

•%e - 可续计数法(比如 1.5e+3)

•%u - 无符号十进制数

•%f - 浮点数(local settings aware)

•%F - 浮点数(not local settings aware)

•%o - 八进制数

•%s - 字符串

•%x - 十六进制数(小写字母)

•%X - 十六进制数(大写字母)

arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处.该函数是逐步执行的.在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推.

我在微信开放平台会看到如下实例代码如下:

  1. $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA); 
  2.                 $fromUsername = $postObj->FromUserName; 
  3.                 $toUsername = $postObj->ToUserName; 
  4.                 $keyword = trim($postObj->Content); 
  5.                 $time = time(); 
  6.     $msgType = "text"
  7.                 $textTpl = "<xml> 
  8.        <ToUserName><![CDATA[%s]]></ToUserName> 
  9.        <FromUserName><![CDATA[%s]]></FromUserName> 
  10.        <CreateTime>%s</CreateTime> 
  11.        <MsgType><![CDATA[%s]]></MsgType> 
  12.        <Content><![CDATA[%s]]></Content> 
  13.        <FuncFlag>0</FuncFlag> 
  14.        </xml>";              
  15.     if(!emptyempty$keyword )) 
  16.                 { 
  17.                  
  18.                  $contentStr = $this->keyrep($keyword); 
  19.      if(  emptyempty($contentStr) ) 
  20.      { 
  21.       $contentStr ="你是故意的吧,没文化真可怕";//你是故意的吧,没文化真可怕; 
  22.      } 
  23.      //$contentStr = @iconv('UTF-8','gb2312',$keyword); 
  24.                  $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr); 
  25.                  echo $resultStr
  26.       
  27.                 }else
  28.                  $contentStr = '没文化真可怕,居然不会打字!';//$this->keyrep($keyword); 
  29.                  //$contentStr = @iconv('UTF-8','gb2312',$keyword); 
  30.      $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr); 
  31.                  echo $resultStr
  32.                 } 

上面用到的是xml中了,下面再看一个网友写的例子

实例代码如下:

  1. <?php 
  2.  /** 
  3.   *        sprintf()函数使用 
  4.   *        @date 2012-12-17 
  5.   *        @author cntnn11 
  6.   */ 
  7.   /** 
  8.   *        手册定义:函数把格式化的字符串写写入一个变量中. 
  9.   *        他的可识别的格式 
  10.   *            %% - 返回百分比符号 
  11.   *            %b - 二进制数 
  12.   *            %c - 依照 ASCII 值的字符 
  13.   *            %d - 带符号十进制数 
  14.   *            %e - 科学计数法(比如 1.5e+3) 
  15.   *            %u - 无符号十进制数 
  16.   *            %f - 浮点数(local settings aware) 
  17.   *            %F - 浮点数(not local settings aware) 
  18.   *            %o - 八进制数 
  19.   *            %s - 字符串 
  20.   *            %x - 十六进制数(小写字母) 
  21.   *            %X - 十六进制数(大写字母) 
  22.   *        sprintf($str, arg1, arg2, arg3 ...); 
  23.  */ 
  24.  
  25.  /** 
  26.  *    1.    %% 
  27.  *        把%%替换成% 
  28.  */ 
  29.  $testStr    = '测试下%%这个参数.会被替换成什么呢'
  30.  echo sprintf($testStr),'<br/>'
  31.  //-> 测试下%这个参数.会被替换成什么呢; 
  32.  //只剩下一个%了 
  33.  //看来还真的只是返回一个‘%’.但是实际应用中该怎么用呢? 
  34.  //我也不知道~ 
  35.  echo '<br/><hr/><br/>'
  36.  /** 
  37.  *    2.    %b  
  38.  *        该参数只能替换整型数据.如果是浮点型,那么他只会取整数部分.小数点后边的会忽略 
  39.  *        如果是一个非整型数据,那么返回 0  
  40.  */ 
  41.  $testStr    = '听说%b会替换成二进制数,真的吗?'
  42.  $arg        = '10'
  43.  echo sprintf($testStr$arg),'<br/>'
  44.  //-> 1010;    $arg=10;    真的替换了! 
  45.  //-> 101;    $arg=4.5 
  46.  //-> 0;        $arg=str/bool... 
  47.  echo '<br/><hr/><br/>'
  48.  
  49.  /** 
  50.  *    3.    %c 返回字符编码的ASCII码 
  51.  *        TIP:[他不是返回ASCII码] 
  52.  *        $arg接受一个int传入即ASCII的数字值,然后返回该值对应的字符 
  53.  */ 
  54.  $testStr    = '我们来测试下 %c : 试试看能返回ASCII码吗'
  55.  $arg    = '122'
  56.  echo sprintf($testStr$arg); 
  57.  //-> A;    $arg=65; 
  58.  //-> z; $arg=122 
  59.  echo '<br/><hr/><br/>'
  60.  /** 
  61.   *    4. %d 将一段字符里的%d替换成int型 
  62.   *        TIP:这里可以是任意一个int整型. 
  63.   *            如果是一个浮点数据,那么只会替换整数部分 
  64.   *            如果是非数字的,那么会替换成0 
  65.   */ 
  66.  $testStr    = "这是一个ID,ID号是%d,"
  67.  $arg        = '-4'
  68.  echo sprintf($testStr$arg); 
  69.  //-> 4;    $arg=4.5 
  70.  //-> 0; $arg=[a-zA-Zs]; 
  71.  echo '<br/><hr/><br/>'
  72.  
  73.  /** 
  74.   *    5.    %e 科学计数法 
  75.   *        TIP:将一段很长很长的int整型数据以科学计数法的形式呈现 
  76.   *            同%d,该函数同样会忽略掉小数点后面的,任何非数值数据替换成0 
  77.  */ 
  78.  $testStr    = "我很长,有N多位... %e"
  79.  $arg        = '46498464654864564642449463699789789313'
  80.  echo sprintf($testStr$arg); 
  81.  //-> 4.649846e+14;    $arg=464984646548645.64642449463699789789313 
  82.  //-> 0.000000e+0; $arg=asdfasdf; 
  83.  echo '<br/><hr/><br/>'
  84.  
  85.  /** 
  86.   *    5.    %u - 无符号十进制数 
  87.   *        不明白...如果有是负数,他的值不知道是啥值 
  88.  */ 
  89.  $testStr    = "我是无符号的十进制数... %u"
  90.  $arg        = '456'
  91.  echo sprintf($testStr$arg); 
  92.  echo '<br/><hr/><br/>'
  93.  
  94.  /** 
  95.   *    6.    %f - 浮点数(local settings aware) 
  96.   *            难道和%d是相反的? 
  97.   *                这个会返回一个浮点数,并且小数点后面只有固定的6位 
  98.   *                字符串同样为 0 ; 
  99.  */ 
  100.  $testStr    = "和那个d有啥区别呢?%f"
  101.  $arg        = '456.235645'
  102.  echo sprintf($testStr$arg); 
  103.  echo '<br/><hr/><br/>'
  104.  
  105.  /** 
  106.   *    7.    %F - 浮点数(not local settings aware) 
  107.   *        难道和%f是相反的?怎么和小f没区别?不会吧 
  108.   */ 
  109.  $testStr    = "和那个小写的f有啥区别呢?%F"
  110.  $arg        = '12312316.46898'
  111.  echo sprintf($testStr$arg); 
  112.  echo '<br/><hr/><br/>'
  113.  
  114.  /** 
  115.   *    8.    %o - 八进制数 
  116.   *        同%d一样.只不过参数传入一个八进制数值 
  117.   */ 
  118.  $testStr    = "将八进制数替换成十进制的 %o"
  119.  $arg        = '8'
  120.  echo sprintf($testStr$arg); 
  121.  echo '<br/><hr/><br/>'
  122.  
  123.  /** 
  124.   *    9.    %x - 十六进制数(小写字母) 
  125.   *        同%d/%o一样.只不过参数传入一个小写字母的十六进制数值 
  126.   */ 
  127.  $testStr    = "将十六进制数替换成十进制的 %o"
  128.  $arg        = '456d12'
  129.  echo sprintf($testStr$arg); 
  130.  echo '<br/><hr/><br/>'
  131.  
  132.  /** 
  133.   *    10.    %X - 十六进制数(大写字母) 
  134.   *        同%d/%o/%x一样.只不过参数传入一个大写字母的十六进制数值 
  135.   *        貌似%x %X两个字母大小写没区别... 
  136.   */ 
  137.  $testStr    = "将大写字母的十六进制数替换成十进制的 %o"
  138.  $arg        = '456D12'
  139.  echo sprintf($testStr$arg); 
  140.  echo '<br/><hr/><br/>'
  141.  
  142.  /** 
  143.   *    11.    %s - 字符串 
  144.   *        用你传入的字符串替换掉%s 
  145.   */ 
  146.  $string    = "这是用来测试的sprintf的字符串( %s ).今天消费了%f元.从西二旗到知春路有%d站.上班"
  147.  $arg    = ''
  148.  echo sprintf($string$arg, 234, 10); 
  149.  echo '<br/><hr/><br/>'
  150.  
  151.    
  152.   ?> 

Tags: sprintf format

分享到: