PHP中,sprintf()的作用是把字符串進行多種類型的格式化
一般用法如下:
sprintf ( string $format [, mixed $... ] ) : string
返回一個按要求格式化后的字符串
其中$format是格式化規則,mixed $即待格式的參數
$format規則較為復雜,包含兩部分,一部分是普通字符(排除 % ),另一部分是 %...,返回結果中普通字符原樣輸出,%...用按特定要求格式化對應參數的結果替換。
%...的一般規范是
%[argnum$][flags][width][.precision]specifier
[]均為可選,%...specifier,不可省略,下面對每一項挨個介紹一下。
- [argnum$]
指定在轉換中使用哪個參數
例如:
$format = 'The %2$s contains %1$d monkeys'; echo sprintf($format, $num, $location);
%2$s 代表使用第二個參數 $location,%1$d 使用第一個參數 $num。
- [flags]
標志位,主要有下面幾個:
- 在給定的字段寬度內左對齊(即右邊自動填充);右對齊是默認設置,如:
sprintf("%05s", 1234) => 01234 sprintf("%-05s", 1234) => 12340
+ 在正數前加上加號 + ; 默認情況下,只有負數前綴有負號,如:
sprintf("%+5d", 1234) => +1234
(空間) 用空格填充結果。這是默認值。
0 左邊用0填充。使用s指示符時,它也可以右補零。
'(指定字符) 設置特定填充字符,如
sprintf("%'.9d", 123); => ......123
需要注意的是,以上標識符是可以同時使用多個的(一直疑惑官網上為什么用表示復數的flags),有沖突時寫在后面的會覆蓋前面的,比如同時使用 '(字符)和0填充,比如:
sprintf("%'.09d", 123); => 000000123 sprintf("%0'.9d", 123); => ......123
- [width]
寬度
轉換結果的最小字符數,包含所有字符,包括小數點和小數點后面的位數
當待轉換參數位數不足此值時,轉換時會按照一定的規則填充滿。
- [.precision]
精度
其含義取決於后面的specifier,主要分為三類
e, E, f, F: 代表小數位數,最常用,如:
sprintf("%.3e",362525200) =》 3.625e+8 sprintf("%01.2f", 123.1) =》 123.10
g, G: -
s: 顯示的字符串的位數,這個比較難理解,看下面例子:
sprintf("%4.2s", 1234); =》 12
即只顯示原參數的位數,位數不足時填充完成。
- specifier
標識符比較多,但較常用的主要是
f, 輸出指定位數的小數
s, 輸出定長的字符串
有個特殊字符 %,需要這樣 %%
以上主要根據來自PHP官網對應頁面()編譯和擴展,如有錯誤歡迎指正。