记录PHP常见的问题处理

9 篇文章 0 订阅
4 篇文章 0 订阅

一、记录mysql存json时文字乱码的问题

  1. 有时候我们的json_encode 存入数据库中乱码 有个参数可以很好的解决这个问题
  2. 就是JSON_UNESCAPED_UNICODE这个参数, json_encode($text,JSON_UNESCAPED_UNICODE) 这样就不会乱码了

二 记录常用打印方法

function p($data){
    // 定义样式
    $str='<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
    // 如果是boolean或者null直接显示文字;否则print
    if (is_bool($data)) {
        $show_data=$data ? 'true' : 'false';
    }elseif (is_null($data)) {
        $show_data='null';
    }else{
        $show_data=print_r($data,true);
    }
    $str.=$show_data;
    $str.='</pre>';
    echo $str;
}

三、富文本内容替换(强制替换)

//把所有src里面的路径替换成你对应的域名
function replacePicUrl($content = null, $strUrl = null){
    $content= preg_replace('/src="\//', 'src="'."$strUrl".'/', $content);
    return $content;
}

四、根据生日计算年龄

//计算年龄
function birthday($birthday){
    $age = strtotime($birthday);
    if($age === false){
        return 0;
    }
    list($y1,$m1,$d1) = explode("-",date("Y-m-d",$age));
    $now = strtotime("now");
    list($y2,$m2,$d2) = explode("-",date("Y-m-d",$now));
    $age = $y2 - $y1;
    if((int)($m2.$d2) < (int)($m1.$d1))
        $age -= 1;
    return $age;
}

五、时间转换

//时间转换
function GEtTime($time){
    if(is_numeric($time)){
        $value = array(
            "years" => 0, "days" => 0, "hours" => 0,
            "minutes" => 0, "seconds" => 0,
        );
        if($time >= 31556926){
            $value["years"] = floor($time/31556926);
            $time = ($time%31556926);
        }
        if($time >= 86400){
            $value["days"] = floor($time/86400);
            $time = ($time%86400);
        }
        if($time >= 3600){
            $value["hours"] = floor($time/3600);
            $time = ($time%3600);
        }
        if($time >= 60){
            $value["minutes"] = floor($time/60);
            $time = ($time%60);
        }
        $value["seconds"] = floor($time);
        $y=$t=$h=$m=$s='';
        if ($value["years"]>0){
            $y=$value["years"]."年";
        }
        if ($value["days"]>0){
            $t=$value["days"]."天";
        }
        if ($value["hours"]>0){
            $h=$value["hours"]."小时";
        }
        if ($value["minutes"]>0){
            $m=$value["minutes"]."分";
        }
        if ($value["seconds"]>0){
            $s=$value["seconds"]."秒";
        }
        $time2=$y.$t.$h.$m.$s;
        return $time2;
    }else{
        return '时间格式不正确';
    }
}

六、记录php基础问题

1.isset()和empty()的区别
 isset函数是检测变量是否定义;只要变量定义了 他都会返回true;不管变量设置的是什么;而且它只检测$a b这种的 如果    传字符串 true,false,布尔值等都会被抛出异常
 empty函数是检测变量是否存在;存在则返回true;不存在返回fasle.
 注意empty有几种特殊情况会返回true; 
【若变量存在且值为""、0、"0"、NULL、、FALSE、array()、var $var;以及没有任何属性的对象,则返回TURE】
2.数组处理array_merge和数组相加的不同
 首先先看都是数字下标的情况
 $arr=[1,2,3,4];
 $arr2=[5,6,7,8,9];
 $arr3=array_merge($arr,$arr2);
 $arr4=$arr+$arr3;
 打印返回结果$arr3返回结果如下
 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 )
 $arr4返回结果
 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 9 )
 $arr3会返回$arr和$arr2的全部数据;
 $arr4返回的是如果键值相同 数组具有相同的键值不会覆盖 而是被抛弃;没有的键值会追加进入并返回一个新数组;
 我就不往下写其他测试结果了;
 我总结一下:
  当下标为数值时,array_merge()不会覆盖掉原来的值,但array+array合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值将会被“抛弃”掉(不是覆盖)
 当下标为字符时,array+array仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,  但array_merge()此时会覆盖掉前面相同键名的值,就是抛弃前面的值. 
 所以对应使用合并数组方法请结合业务来选择;数组去重就不只是单一的array_unique(array_merge())了

七. 记录一下高精度计时函数

PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述
bcadd        — 加法
bccomp     — 比较
bcdiv         — 相除
bcmod       — 求余数
bcmul        — 乘法
bcpow       — 次方
bcpowmod — 先次方然后求余数
bcscale      — 给所有函数设置小数位精度
bcsqrt        — 求平方根
bcsub        — 减法

八.记录php将数组或者对象写入文件得三种方法

  1. serialize方法(序列化存,反序列取)
<?php 
$file='./cache/phone.php'; 
$array=array('color'=> array('blue','red','green'),'size'=> array('small','medium','large')); 
//缓存 
if(false!==fopen($file,'w+')){ 
  file_put_contents($file,serialize($array));//写入缓存 
} 
//读出缓存 
$handle=fopen($file,'r'); 
$cacheArray=unserialize(fread($handle,filesize($file)));
  1. print_r方法
<?php
$b = array (
    'm' => 'monkey', 
    'foo' => 'bar', 
    'x' => array ('x', 'y', 'z'));

$results = print_r($b, true); 
file_put_contents('filename.txt', print_r($b, true));
?>

3.var_export方法(推荐)

<?php 
$file='./cache/phone.php'; 
$array=array('color'=> array('blue','red','green'),'size'=> array('small','medium','large')); 
//缓存 
$text='<?php $rows='.var_export($array,true).';'; 
if(false!==fopen($file,'w+')){ 
  file_put_contents($file,$text); 
}else{ 
  echo '创建失败'; 
}

九、号码隐藏
 function yincang($string, $start = 0, $length = 0, $re = '*'){
            if(empty($string) || empty($length) || empty($re)) return $string;
            $end = $start + $length;
            $strlen = mb_strlen($string);
            $str_arr = array();
            for($i=0; $i<$strlen; $i++) {
                if($i>=$start && $i<$end)
                    $str_arr[] = $re;
                else
                    $str_arr[] = mb_substr($string, $i, 1);
            }
           return implode('',$str_arr);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是誰萆微了承諾

你的鼓励是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值