程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP sprintf() 函數使用方法詳解

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

編輯:關於PHP編程

我們知道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,依此類推。

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

 代碼如下 復制代碼

$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/>';
 
 
  ?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved