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 :該參數只能替換整型資料,如果是浮點型,只會取整數部分,會忽略小數點後面的資料。如果是非整型資料。www.111Cn.net返回 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); // www.111Cn.net返回結果: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行資料執行