PHP sprintf() 函數使用方法詳解

來源:互聯網
上載者:User

用法

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,依此類推。

我在微信開放平台會看到如下代碼

 代碼如下 複製代碼

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
    $msgType = "text";
                $textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[%s]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";            
    if(!empty( $keyword ))
                {
                
                 $contentStr = $this->keyrep($keyword);
     if(  empty($contentStr) )
     {
      $contentStr ="你是故意的吧,沒文化真可怕";//你是故意的吧,沒文化真可怕;
     }
     //$contentStr = @iconv('UTF-8','gb2312',$keyword);
                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                 echo $resultStr;
     
                }else{
                 $contentStr = '沒文化真可怕,居然不會打字!';//$this->keyrep($keyword);
                 //$contentStr = @iconv('UTF-8','gb2312',$keyword);
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                 echo $resultStr;
                }

上面用到的是xml中了,下面再看一個網友寫的例子

 代碼如下 複製代碼


<?php
 /**
  *        sprintf()函數使用
  *        @date 2012-12-17
  *        @author cntnn11
  */
  /**
  *        手冊定義:函數把格式化的字串寫寫入一個變數中。
  *        他的可識別的格式
  *            %% - 返回百分比符號
  *            %b - 位元
  *            %c - 依照 ASCII 值的字元
  *            %d - 帶符號十進位數
  *            %e - 科學計數法(比如 1.5e+3)
  *            %u - 無符號十進位數
  *            %f - 浮點數(local settings aware)
  *            %F - 浮點數(not local settings aware)
  *            %o - 八位元
  *            %s - 字串
  *            %x - 十六進位數(小寫字母)
  *            %X - 十六進位數(大寫字母)
  *        sprintf($str, arg1, arg2, arg3 ...);
 */
 
 /**
 *    1.    %%
 *        把%%替換成%
 */
 $testStr    = '測試下%%這個參數。會被替換成什麼呢';
 echo sprintf($testStr),'<br/>';
 //-> 測試下%這個參數。會被替換成什麼呢;
 //只剩下一個%了
 //看來還真的只是返回一個‘%’。但是實際應用中該怎麼用呢?
 //我也不知道~
 echo '<br/><hr/><br/>';
 /**
 *    2.    %b
 *        該參數只能替換整型資料。如果是浮點型,那麼他只會取整數部分。小數點後邊的會忽略
 *        如果是一個非整型資料,那麼返回 0
 */
 $testStr    = '聽說%b會替換成位元,真的嗎?';
 $arg        = '10';
 echo sprintf($testStr, $arg),'<br/>';
 //-> 1010;    $arg=10;    真的替換了!
 //-> 101;    $arg=4.5
 //-> 0;        $arg=str/bool...
 echo '<br/><hr/><br/>';
 
 /**
 *    3.    %c 返回字元編碼的ASCII碼
 *        TIP:[他不是返回ASCII碼]
 *        $arg接受一個int傳入即ASCII的數字值,然後返回該值對應的字元
 */
 $testStr    = '我們來測試下 %c : 試試看能返回ASCII碼嗎';
 $arg    = '122';
 echo sprintf($testStr, $arg);
 //-> A;    $arg=65;
 //-> z; $arg=122
 echo '<br/><hr/><br/>';
 /**
  *    4. %d 將一段字元裡的%d替換成int型
  *        TIP:這裡可以是任意一個int整型。
  *            如果是一個浮點數據,那麼只會替換整數部分
  *            如果是非數位,那麼會替換成0
  */
 $testStr    = "這是一個ID,ID號是%d,";
 $arg        = '-4';
 echo sprintf($testStr, $arg);
 //-> 4;    $arg=4.5
 //-> 0; $arg=[a-zA-Zs];
 echo '<br/><hr/><br/>';
 
 /**
  *    5.    %e 科學計數法
  *        TIP:將一段很長很長的int整型資料以科學計數法的形式呈現
  *            同%d,該函數同樣會忽略掉小數點後面的,任何非數值資料替換成0
 */
 $testStr    = "我很長,有N多位。。。 %e";
 $arg        = '46498464654864564642449463699789789313';
 echo sprintf($testStr, $arg);
 //-> 4.649846e+14;    $arg=464984646548645.64642449463699789789313
 //-> 0.000000e+0; $arg=asdfasdf;
 echo '<br/><hr/><br/>';
 
 /**
  *    5.    %u - 無符號十進位數
  *        不明白。。。如果有是負數,他的值不知道是啥值
 */
 $testStr    = "我是無符號的十進位數。。。 %u";
 $arg        = '456';
 echo sprintf($testStr, $arg);
 echo '<br/><hr/><br/>';
 
 /**
  *    6.    %f - 浮點數(local settings aware)
  *            難道和%d是相反的?
  *                這個會返回一個浮點數,並且小數點後面只有固定的6位
  *                字串同樣為 0 ;
 */
 $testStr    = "和那個d有啥區別呢?%f";
 $arg        = '456.235645';
 echo sprintf($testStr, $arg);
 echo '<br/><hr/><br/>';
 
 /**
  *    7.    %F - 浮點數(not local settings aware)
  *        難道和%f是相反的?怎麼和小f沒區別?不會吧
  */
 $testStr    = "和那個小寫f有啥區別呢?%F";
 $arg        = '12312316.46898';
 echo sprintf($testStr, $arg);
 echo '<br/><hr/><br/>';
 
 /**
  *    8.    %o - 八位元
  *        同%d一樣。只不過參數傳入一個八位元值
  */
 $testStr    = "將八位元替換成十進位的 %o";
 $arg        = '8';
 echo sprintf($testStr, $arg);
 echo '<br/><hr/><br/>';
 
 /**
  *    9.    %x - 十六進位數(小寫字母)
  *        同%d/%o一樣。只不過參數傳入一個小寫字母的十六進位數值
  */
 $testStr    = "將十六進位數替換成十進位的 %o";
 $arg        = '456d12';
 echo sprintf($testStr, $arg);
 echo '<br/><hr/><br/>';
 
 /**
  *    10.    %X - 十六進位數(大寫字母)
  *        同%d/%o/%x一樣。只不過參數傳入一個大寫字母的十六進位數值
  *        貌似%x %X兩個字母大小寫沒區別...
  */
 $testStr    = "將大寫字母的十六進位數替換成十進位的 %o";
 $arg        = '456D12';
 echo sprintf($testStr, $arg);
 echo '<br/><hr/><br/>';
 
 /**
  *    11.    %s - 字串
  *        用你傳入的字串替換掉%s
  */
 $string    = "這是用來測試的sprintf的字串( %s )。今天消費了%f元。從西二旗到知春路有%d站。上班";
 $arg    = '';
 echo sprintf($string, $arg, 234, 10);
 echo '<br/><hr/><br/>';
 
 
  ?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.