首页 > php开发 > PHP sprintf() 函数使用方法详解

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

我们知道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,依此类推.

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

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


教程网址:http://www.phprm.com/develop/fs2124.html

欢迎收藏∩_∩但请保留本文链接。

标签:sprintf format

相关文章

发表留言