3分鐘短文|PHP 數值格式化,前導0還能這麼加!

2020-12-22 程式設計師小助手

引言

編寫程序過程中,經常需要處理小數,或整型數據。比如訂單號,通過拼接多段業務數據成為新的字符串。今天我們來說一下,如何在數值格式化的時候。為其進行前導零補全。

學習時間

比如有一個需求,對於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 :_)

我是 @程式設計師小助手 ,持續分享編程知識,歡迎關注。

相關焦點

  • 6位顯示數字 php - CSDN
    1,年-月-日echo date(『Y-m-j『);2007-02-6echo date(『y-n-j『);07-2-6大寫Y表示年四位數字,而小寫y表示年的兩位數字;小寫m表示月份的數字(帶前導),而小寫n則表示不帶前導的月份數字。
  • 3分鐘短文|PHP 求2個日期相差天數,兼容性好錯誤率低,收藏了
    因為日期可以是字符串,對象,數值,格式各不相同,有的精確到日,有的精確到小時,有的精確到毫秒。如何在處理中做到容錯率要高呢。學習時間先說最笨的辦法。不藉助任何對象,我們僅使用內置的函數加減乘除和格式轉換。像下面這樣寫。(這個方法對於實施了夏令時的地區,會出現錯誤。)
  • 3分鐘短文|PHP偽隨機Token生成器,實地測試,效果感人!
    bin2hex(openssl_random_pseudo_bytes($bytes))使用 openssl_random_pseudo_bytes 函數生成一個偽隨機字符串的字節,然後使用 bin2hex 將其格式化為十六進位的字符串。
  • php基礎訓練,3分鐘課堂
    接上一節,php基礎試題訓練,祝你快速掌握php內容! 錯誤 正確解析:php是一種區分大小寫的腳本語言!2、下面哪種類型的變量是浮點數,比如 3.14159 或 49.1? integer double boolean string解析:在php中,各種數據類型分別用——integer – 整型,double – 浮點型,boolean – 布爾型,string – 字符串來表示。
  • 每天三分鐘:PHP打通關檢驗
    php常見函數列表1. 下列哪個函數用於按降序排列數組 ? asort() sort() dsort() rsort()解析:rsort() 函數對數值數組進行降序排序,sort()默認就是升序排列。2. php中哪個內置函數會在數組末尾添加值 ? into_array() array_unshift() array_push() inend_array()解析:array_push() 函數向第一個參數的數組尾部添加一個或多個元素(入棧),然後返回新數組的長度。3. php可以使用哪個函數將指針移動到前面的數組位置 ?
  • u盤一打開就讓格式化,千萬別急著格式化處理,其實還能修復的
    很多時候,u盤插上電腦後,提示需要格式化。其實,這有可能是沒有正確彈出u盤熱拔插導致的問題。大家千萬別急著格式化處理,只要並不是u盤的主控或者儲存晶片損壞了,其實可以通過簡單的幾部修復u盤的。這樣就能修復提示就讓格式化的u盤,而且還能恢復u盤原來的數據,免除這個問題導致丟失數據的麻煩。但這樣假如也修復不了u盤,還是沒法打開的話,這樣估計是u盤主控或者儲存晶片帶來的損壞導致的問題,只能對u盤進行更換使用了。
  • PHP文件包含漏洞利用思路與Bypass總結手冊(完結)
    (1)base64編碼過程Base64將輸入字符串按字節切分,取得每個字節對應的二進位值(若不足8比特則高位補0),然後將這些二進位數值串聯起來,再按照6比特一組進行切分(因為2^6=64),最後一組若不足6比特則末尾補0。
  • 有安全研究者混入了 PHP 8.0 開發組!
    來源 | 代碼審計(ID:white-hat-note)經歷了近半年的alpha版本測試後,PHP在2020年11月26號正式發布了8.0版本:https://www.php.net/releases/8.0/en.php今天我們就來瀏覽一下PHP 8.0中出現的主要特性,以及它給我們安全研究人員帶來的挑戰。
  • 3分鐘短文:Laravel路子真野啊!路由暱稱前綴中間件
    MembersController@show')->name('members.show'); 這樣定義之後在HTML文件內比如有 a 標籤,或者 form 表單的 action,填url地址的時候,就可以使用laravel的助手函數,這樣來寫: 這樣使用起來,就好像記一個函數名一樣,然後通過數組傳入綁定的位置參數,一般不容易寫錯,格式化也更好
  • PHP 框架 Blink 0.3 發布,新增插件機制及路由分組功能
    Blink 不僅僅是一個 Web 框架,也是一個 Web 伺服器,可以脫離 php-fpm、Apache 獨立運行,其底層基於 Swoole 的 http server,性能有保障。
  • 內存卡格式化了還能用嗎?裡面的數據怎麼恢復呢?
    內存卡格式化了還能用嗎?裡面的數據怎麼恢復呢?但是不管是哪種形式的內存卡設備,如果格式化數據,數據將全部被清除,這些數據我們還能找回嗎?我們一起來分析一下吧! 2、安裝好以後打開軟體,選擇首界面中的「格式化數據恢復」,然後開始掃描數據,數據掃描完成後就可以開始恢復了,這個軟體支持部分軟體的預覽,可以雙擊文件進行預覽,找到自己想要恢復的文件,就可以勾選恢復了
  • ROCBOSS v2.1.0 正式發布,PHP 微社區
    ROCBOSS v2.1.0 正式發布,現已提供下載:http://git.oschina.net/rocboss/ROCBOSS/repository/archive?
  • Python不同數值類型間的轉化,以及內置數學函數示例
    int( )函數不僅能夠把其他數值類型轉化為整型,還能夠自動識別純數字的字符串,將其變成整型。例如一個字符串"157",用int("157")轉化後,得到了整數157。將數值轉化為浮點型轉化為浮點型的函數是float( n ),可以將整型數據變成浮點型,就算是整數0,也會轉化為0.0的浮點型0。在具體的使用時,我們一般會確定保留幾位小數,要實現這個要求並不能在float( )函數處進行處理,而是要在print( )函數處理。
  • php中函數禁用繞過的原理與利用
    glob查找匹配的文件路徑模式,是php自5.3.0版本起開始生效的一個用來篩選目錄的偽協議常用bypass方式如下:<?php $c = "glob:///*"; $a = new DirectoryIterator($c); foreach($a as $f){ echo($f->__toString().'
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    如果我們想要知道照片中是誰,首先我們需要使用 train 方法訓練模型,它需要兩個參數:對於這些圖像的一個人臉圖像的數組和一個數值標籤的數組。然後你可以在測試圖像(人臉)上調用 predict 方法並獲得相匹配的數值標籤。
  • PHP7 版本各大類型特性
    php5.6 升級 php7.0 支持的特性標量類型聲明標量類型聲明 有兩種模式: 強制 (默認) 和 嚴格模式。function sumOfInts(int ...$ints){ return array_sum($ints);}var_dump(sumOfInts(2, '3', 4.1));php5.6不支持的。強制類型支持如下類型Class/interface name 該參數必須是instanceof給定的類或接口名稱。 PHP 5.0.0self 參數必須instanceof與定義方法的類別相同。
  • 雲計算核心技術Docker教程:Docker 安裝 PHP
    為php,標籤為5.6-fpm的鏡像。3.啟動 PHP:# docker run name myphp-fpm -v ~/nginx/www:/www -d php:5.6-fpm命令說明:name myphp-fpm : 將容器命名為 myphp-fpm。
  • WordPress 配置文件 wp-config.php 詳細介紹
    2.在WordPress安裝的基本目錄中找到wp-config.php文件。3.使用文本編輯器打開文件。3.仔細進行更改,注意PHP的語法。仔細檢查WordPress Codex中的值。4.確保檢查輸入的任何值前後的前導空格和/或尾隨空格。不要刪除單引號!5.在保存文件之前,請再次確認您沒有意外刪除參數值周圍的任何單引號。確保文件中關閉PHP標記後沒有任何內容。文件中的最後一件事應該是?>,僅此而已。沒有空間。
  • 魔獸世界:部落法系職業福利 領取30分鐘智力buff 雙倍合劑數值
    這一期介紹一個部落方的法系職業的福利,3分鐘領取持續30分鐘的智力buff,等級越高智力越高,111級是217智力,119級是475智力,推算120級應該在500智力以上。這個智力buff可以在任何野外地圖有效,在普通、英雄和史詩五人本都有效,團本有效,只有大米無效,大米插鑰匙會清除所有buff。
  • 阿松巴隆加破門,米德爾斯堡3-0完勝德比郡
    MIDDLESBROUGH CN米德爾斯堡在河畔球場以3-0的比分擊敗目前位於積分榜末位的德比郡,米德爾斯堡前鋒阿松巴隆加在比賽中打入兩粒進球確保了勝利的回歸德比郡的第一次射門機會是在比賽進行到第30分鐘時,德比郡前鋒馬克斯·伯德在禁區邊緣嘗試了一腳打門後,馬庫斯·貝蒂內利將球抱住。幾分鐘後,米德爾斯堡中鋒阿松巴隆加,後排插上,喬尼·豪森送出了一記傳中球,布裡特·阿松巴隆加在球門前將球擊中,得分,破壞了客隊的光明的開局,讓排名墊底的德比郡隊連續第四場聯賽失利。