引言
編寫程序過程中,經常需要處理小數,或整型數據。比如訂單號,通過拼接多段業務數據成為新的字符串。今天我們來說一下,如何在數值格式化的時候。為其進行前導零補全。
學習時間
比如有一個需求,對於0-9的正整數進行格式化,使其輸出 00-09。在 PHP 中應該怎麼寫呢?
首先肯定是從 C 語言就繼承來的 sprintf 這個格式化函數。
$s = sprintf('%02d', $digit);
其中格式化 02 表示左側至少是2位整數,多出的部分不管,不夠的補零。
既然都是字符串格式化,我們藉助 PHP 提供的字符串補全函數 str_pad,也可以達到相同的效果。代碼這樣寫:
echo str_pad($digit, 2, "0", STR_PAD_LEFT);
注意參數,2是補全的長度,超過的不用補,不夠的至少補到2位。「0」是用於補全的字符,STR_PAD_LEFT 常量用於指定左補全。
下面是一些 str_pad 的用法:
$input = "Alien";echo str_pad($input, 10); // 輸出"Alien " echo str_pad($input, 10, "-=", STR_PAD_LEFT); // 輸出"-=-=-Alien" echo str_pad($input, 10, "_", STR_PAD_BOTH); // 輸出"__Alien___" echo str_pad($input, 6 , "___"); // 輸出"Alien_"
深入討論
上面給出的2種補全的方式,哪種效率更高一些呢?我們通過代碼進行測試:
上述代碼在 PHP 5.3 的基準測試中,結果是這樣的:
str_pad : 0.286863088608sprintf : 0.234171152115可以看到,在較為頻繁地使用前導處理時,格式化函數 sprintf 所使用的時間更少,也從側面證明了這個老牌函數的堅固可用。
寫在最後
本文通過兩個 PHP 函數演示了對於數值的前導補零操作,並且經過測試也發現使用頻次較高的 sprintf 函數更勝一籌。
我們也提倡在代碼中使用 sprintf 用于格式化,其功能非常可靠。特別需要注意的是,格式化元字符對於特殊字符的處理一定要慎重。
Happy coding :_)
我是 @程式設計師小助手 ,持續分享編程知識,歡迎關注。