用處:把字串進行多種型別的格式化
用於:處理xml資料格式時,需要用到他來格式化等等
基本語法格式:sprintf("%格式化型別","$str1","$str2") ;
先看一下型別參照表,也就是要轉換成什麼型別的格式
這是轉換格式的型別參照表
先舉個最簡單的案例
這什麼意思呢<?php
$str1="1234";
echo sprintf("hello%s","$str1");
//效果為: hello1234
?>
要點:%s = %符號和後面屬性符號(s)總稱為插入標記組合,也就是把後面準備進行格式化的值($str1)替換在這個位置
hello = 這個單詞就是很多人蒙蔽的地方,告訴你這個什麼代表也沒有,就單純的代表乙個hello,用於分割或者修飾用,一般用[ %s ]、這樣格式化出來後就直接在標籤裡
記住,乙個%標記符後面只有乙個型別屬性(比如s),s是什麼上面有,以字串的方式格式化
那麼多個值怎麼格式化一起呢
看
%s為乙個標記,兩個%s%s這樣寫卻是錯誤的,每個%s必須標記鍵位,不然我怎麼知道都代**式化後面的哪個$str呢,所以有個特別的語法<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("%1\$s%2\$s",$c,$a);
//效果為: 1234abcdef
?>
%1\$%2\$ 解釋:%1表示格式化sprintf("%1\$%2\$",''$str1","$str2")中對應的$str1,那麼%2自然表示格式化$str2,\$是代表有多個值準備格式化,所以每個%1和%2或者還有%3的標記後都要加這個符號代表一行中有多個標記,如果只有乙個標記就不用\$了佔位符了,記住$str2、$str3是可選,也就是可以不格式化這麼多
講個特殊的例子
sprintf("%'x13.2f",$c);<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("%'x13.2f",$c);
// 效果為:******1234.00
//echo sprintf("%06.2f", $a);
?>
這是什麼意思,f是浮點數,第一步按照格式 % '(補位值) 寬度值 格式化型別 這三部分,語法之間必須緊挨著不能用空格
必須解釋一下何為補位值:就是設定的寬度超出了,用這個值來填上
解釋一下,補位值只有設定寬度超出了目標值才能用
所以就是用x補位,13為總寬度,2為小數點後的寬度,f為格式化型別,別急我會解釋
' 號(單引號)代表接下來要用補位型別
為什麼他能識別x是補位值呢,因為前面有 ' 號,
為什麼他能識別哪幾位是哪種型別呢,他是這樣識別的,按順序從先從兩頭的字元開始識別是什麼型別,補位值肯定是單數字,不可能乙個位置補兩個數吧,所以左邊第一位x是補位值,右邊第一位是格式化型別,然後中間的自然是寬度值
第二,為什麼小數點 後還有乙個屬性 ,因為這是f(浮點型),必須設定小數點後有幾位,不能小數後面不能設定了吧,那浮點數意義何在呢
不要覺得煩,每個例子都是濃縮出來的
整數補位
這就是整數補位,還是一樣<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("%'07s",$c);
//結果是:0001234
?>
第一步按照格式 % '(補位值) 寬度值 格式化型別 這三部分
0是補位值 7是寬度值 s自然是格式化型別
還有一種最重要的例子
<?php
$a="abcdef";
$b="abcdef";
$c="1234";
echo sprintf("[%-6s]",$c); //結果是:[1234 ]
echo sprintf("[%-4s]",$c); //結果是:[1234]
echo sprintf("[%4.2s]",$c); //結果是:[ 12]
?>
這個第一步 [ ] 僅僅只是修飾,不用理解
第二步,沒有' 號,證明沒有補位,無需新增補位值
所以語法格式為 : % 寬度值 格式化型別 這兩部分
第一二行解釋如下:
第乙個寬度為6,但是$c=1234 ,只有4個字元,所以寬度不夠,所以右邊自動擴充(擴充再多也只顯示乙個空格位置),為什麼在右邊擴充,因為寬度前有個 - 號,代表補位方向相反,如在補位值前加-,自然從右邊開始補位
下面為什麼沒變化,因為寬度正好一致,只是補位的方向改變了
第三行解釋如下:
不要被蒙蔽了,語法結構還是一樣 % 寬度值 格式化型別 這兩部分
沒有 ' 號,證明沒有補位,無需新增補位值
所以4.2依舊是寬度值
只是小數點左邊的4代表總寬度,右邊的2代表只顯示2位出來,所以又空缺了兩個,所以左邊開始擴充兩個空位,為什麼只顯示乙個空格上一段說了,再說一次吧擴充再多也只顯示乙個空格位置。預設從左邊開始
參考:
sprintf函式詳解
printf 可能是許多程式設計師在開始學習c 語言時接觸到的第二個函式 我猜第乙個是main 說 起來,自然是老朋友了,可是,你對這個老朋友了解多嗎?你對它的那個孿生兄弟sprintf 了解多 嗎?在將各種型別的資料構造成字串時,sprintf 的強大功能很少會讓你失望。由於sprintf 跟pr...
sprintf函式詳解
sprintf 將字串格式化。標頭檔案 include 語法 int sprintf string format,mixed args 返回值 字串長度 strlen 1.處理字元方向。負號時表時從後向前處理。2.填空字元。0 的話表示空格填 0 空格是內定值,表示空格就放著。3.字元總寬度。為最小...
C 中sprintf 函式的使用詳解
在將各種型別的資料構造成字串時,sprintf 的強大功能很少會讓你失望。由於sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。這也導致sprintf 比printf 有用得多。sprintf 是個變參函式,定義如下 int sp...