我們知道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(!emptyempty( $keyword ))
- {
- $contentStr = $this->keyrep($keyword);
- if( emptyempty($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/>';
- ?>
新聞熱點
疑難解答