php 实战常用代码示例

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();  //事务回滚
        }

猜你喜欢

转载自www.cnblogs.com/babytuo/p/8986400.html