PHP之sprintf函數用法詳解_php技巧

來源:互聯網
上載者:User

本文執行個體講述了PHP中sprintf函數的用法。分享給大家供大家參考。具體用法分析如下:

sprintf()函數在php官方是說把字串格式化輸出了,本文就來給各位朋友介紹一下在學習sprintf()函數時的一些經驗分享,希望能給大家帶來協助.

PHP函數 sprintf() 函數官方定義為:sprintf():把格式化的字串寫入一個變數中

文法為:sprintf(format,arg1,arg2,arg++);

參數:

format:必須,轉換格式

arg1 :必須,規定插入 format 字串中第一個%符號處的參數

arg1 :可選,規定插入 format 字串中第二個%符號處的參數

arg1++:可選,規定插入 format 字串中第三、四等%符號處的參數

參數 format 的轉換格式,以百分比符號(%)開始到轉換字元結束,下面是有可能的format值.

%% – 返回百分比符號

%b – 位元

%c – 依照 ASCII 值的字元

%d – 帶符號十進位數

%e – 可續計數法(比如 1.5e+3)

%u – 無符號十進位數

%f – 浮點數(local settings aware)

%F – 浮點數(not local settings aware)

%o – 八位元

%s – 字串

%x – 十六進位數(小寫字母)

%X – 十六進位數(大寫字母)

下面是一些demo,代碼如下:

複製代碼 代碼如下:
// 1. %% :把 %% 替換成 % 
$str = '測試一下 %% 這個參數,會被替換成什麼'; 
echo sprintf($str); 
//返回結果: 測試一下 % 這個參數,會被替換成什麼(%%被替換成一個%) 

// 2. %b :該參數只能替換整型資料,如果是浮點型,只會取整數部分,會忽略小數點後面的資料。如果是非整型資料。返回 0 
$str = '參數 %b 會替換成位元'; 
$arg = '10'; 
echo sprintf($str,$arg); 
//返回結果:參數 1010 會替換成位元 
$arg = 10.23; 
echo sprintf($str,$arg); 
//返回結果:參數 1010 會替換成位元 
$arg = 'abc'; 
echo sprintf($str,$arg); 
//返回結果:參數 0 會替換成位元 

// 3. %c 返回字元編碼的ASCII碼 
$arg = 65; 
$str =  "數字 {$arg} 對應的ASCII碼為 %c "; 
echo sprintf($str,$arg); 
//返回結果:數字 65 對應的ASCII碼為 A 
 
// 4. %d 將一段字元裡的%d替換成int型,資料要求同 $b 相同 
$str = 'ID號為 %d '; 
$arg = -3; 
echo sprintf($str,$arg); 
//返回結果:ID號為 -3 
$arg = 4.5; 
echo sprintf($str,$arg); 
//返回結果:ID號為 4 
$arg = 'abc'; 
echo sprintf($str,$arg); 
//返回結果:ID號為 0 
 
// 5. %s - 字串 
$str = "這是用來測試的sprintf的字串( %s )。今天消費了%f元。從鐘樓到小寨有%d站。上班"; 
$arg = '%s'; 
echo sprintf($str,$arg,6,5); 
//返回結果:這是用來測試的sprintf的字串( %s )。今天消費了6.000000元。從鐘樓到小寨有5站。上班


至於其它的參數,大家可以試著測試一下.

下面說一下這個函數的一些用途,比如我們在對一張資料表所有資料做多個欄位更新時,如果使用迴圈更新的話,那是很耗費資源的,這裡就要用到我們sprintf()函數了.

在資料庫批次更新時,我一般採用 case then when end 的文法來做,基本文法如:

複製代碼 代碼如下:
UPDATA table 
    SET field = CASE id 
        WHEN 1 THEN 'value1' 
        WHEN 2 THEN 'value2' 
        WHEN 3 THEN 'value3' 
    END 
WHERE id IN (1,2,3)

上面的意思就是說,更新 table 設定 id = 1 的值為 value1, id = 2 的值為 value2 ,id = 3 的值為 value3,這樣參數上面的函數將sql語句結合成這樣SQL語句,只需一條SQL就可以進行批次更新,具體的方法為:
複製代碼 代碼如下:
//比如 id 對應的值為以下數組 
$info = array(1=>'張三',2=>'李四',3=>'王五'); 
$ids = implode(',',array_keys($info)) //擷取所有的ID字串 
//組合SQL 
$sql = "UPDATA user SET username = CASE id"; 
foreach($info as $id=>$username){ 
     $sql .= sprintf("WHEN %d THEN %s",$id,$username); 

$sql .= "END WHERE id IN ($ids)"; 
// $model->query($sql)

上面就可以完成批次更新的操作,後面的 where子句確保只有3行資料執行.

希望本文所述對大家的PHP程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.