1. 程式人生 > >php 實戰常用代碼示例

php 實戰常用代碼示例

php ans break pat 字符串長度 return 示例 生產 bcmul

1 依次輸出一數組。每輸入3個換一行。

//講個小細節,有人說 $i< sizeof($len) 每次循環時都要去計算下數組長度,是否很浪費性能。 -----回答: 1 你觀察很細。 2 現在的解釋器比較智能,這個問題會被自動優化處理。

for($i  = 0; $i<sizeof($len); $i++){  
   if( $i && $i%3==0) echo "<br>";
   echo $arr[$i];
}

2 字符串不允許出現特殊字符。

        $chinese= "\x{4e00}-\x{9fa5}";//中文匹配
        $pattern
="/^[a-zA-Z0-9($chinese)]+$/u";//加上英文、數字匹配 if(!preg_match($pattern,$nick_name)) { exit("不允許特殊字符"); }

3 支付utf-8 的 strlen 和 substr 函數。 (求utf-8 字符串長度,求utf-8 的子字符串 )

   //utf-8 求utf-8 字符串長度
   function  strlen_utf8($str)
   {
        $i = 0;
        $count = 0;
        $len = strlen
($str); while ($i < $len) { $chr = ord($str[$i]); $count++; $i++; if ($i >= $len) break; if ($chr & 0x80) { $chr <<= 1; while ($chr & 0x80) { $i++;
$chr <<= 1; } } } return $count; } //求utf-8 子字符串。 function subStringUtf8($str, $start, $lenth) { $len = strlen($str); $r = array(); $n = 0; $m = 0; for ($i = 0; $i < $len; $i++) { $x = substr($str, $i, 1); $a = base_convert(ord($x), 10, 2); $a = substr(‘00000000‘ . $a, -8); if ($n < $start) { if (substr($a, 0, 1) == 0) { } elseif (substr($a, 0, 3) == 110) { $i += 1; } elseif (substr($a, 0, 4) == 1110) { $i += 2; } $n++; } else { if (substr($a, 0, 1) == 0) { $r[] = substr($str, $i, 1); } elseif (substr($a, 0, 3) == 110) { $r[] = substr($str, $i, 2); $i += 1; } elseif (substr($a, 0, 4) == 1110) { $r[] = substr($str, $i, 3); $i += 2; } else { $r[] = ‘‘; } if (++$m >= $lenth) { break; } } } return join("", $r); }

4 小數位減法時,容易丟失精度,使用數學函數。

$sum =  bcadd($a , $b , 4);  // a+b 保留4位小數。
$diff  = bcsub( $a , $b  , 4); // a- b 保留4位小數。
$mul = bcmul($a , $b , 4);    //a*b 保留4位小數。
$div = bcdiv($a , $b , 4);    //a/b 保留4位小數  b 不能為0.

5 使用事務。(不同框架代碼不一樣,這裏以Yii 為例)

 $trans = Yii::app()->db->beginTransaction();  //創建事務。
 $trans->commit();   //事務提交
 $trans->rollback();   //事務回滾

6 異常處理。 (生產環境中,不希望對外暴露錯誤,以及程序執行意外時,數據庫回滾處理。)

       try {
            $trans = Yii::app()->db->beginTransaction();
            //... 中間的執行代碼
            $trans->commit();  //事務提交
        } catch (Exception $e) {
            log($e->getMessage());  //日誌記錄異常信息
            $trans->rollback();  //事務回滾
        }

php 實戰常用代碼示例