- // 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行資料執行。 |