php常用方法封装

1、截取字符串,要求最多占据N个汉字的位置
/**
     * 截取显示子字符串长度,1个汉字长度为2,一个字母或数字长度为1
     *
     * @param String $str 待截取的字符串
     * @param integer $showLength 显示的字符串长度
     * @param string $strEncoding 输入的字符串编码,默认为utf8
     * @return string
     */
    public function GetSubStrShown($str, $showLength, $strEncoding = 'utf8') {
        $result = '';
        $len = 0;
        for($i = 0, $count = mb_strlen ( $str, $strEncoding ); $i < $count; $i ++) {
            $tmp = mb_substr ( $str, $i, 1, $strEncoding );
            $tmpLen = strlen ( mb_convert_encoding ( $tmp, "gbk", $strEncoding ) );
            if ($len + $tmpLen > $showLength)
                return $result;
            $len += $tmpLen;
            $result .= $tmp;
        }
        return $result;
    }
2、根据提供的日期获取当前周的全部日期信息
    /**
     * @param string $time 时间戳
     * @param string $format 转化格式
     * @return array
     */
    function get_week($time = '', $format='Y-m-d'){
        $time = $time != '' ? $time : time();   // 时间为空吗,则获取当前时间戳
        $week = date('w', $time);   // 获取当前时间是周几
        $date = [];  
        for ($i=1; $i<=7; $i++){
            // 从周日开始
            $date[$i] = date($format ,strtotime( '+' . $i-$week-1 .' days', $time));  
            // 从周一开始
            $date[$i] = date($format ,strtotime( '+' . $i-$week .' days', $time));
        }
        return $date;
    }
3、中文字符串中间部分字符替换操作
一、步骤:1、计算长度

2、根据长度截取第一部分字符串

3、截取中间部分字符串

4、截取最后一部分字符串或者去掉前两部分字符串

5、替换中间部分字符串为星号

6、连接字符串
/**
* 中文字符串中间部分替换(最多替换二分之一)
* @param string $username 中文字符串
* @return string 处理后的字符串
*/
function ceshi($username){
    // 计算字符串长度,无论汉字还是英文字符全部为1
    $length = mb_strlen($username,'utf-8');
    
    // 截取第一部分代码
    $firstStr1 = mb_substr($username,0,ceil($length/4),'utf-8');
    // 截取中间部分代码
    $firstStr = mb_substr($username,ceil($length/4),floor($length/2),'utf-8');
    // (方法一)截取剩余字符串
    $firstStr2 = mb_substr($username,ceil($length/4) + floor($length/2), floor(($length+1)/2 - 1),'utf-8');
    // (方法二)是直接去掉前两部分字符串
    // $firstStr2 = "";
    // if($firstStr && $username){
        // $firstStr2 = str_replace_once($username,$firstStr1,"");
        // $firstStr2 = str_replace_once($firstStr2,$firstStr,"");
    // }
    
    return $firstStr1 . str_repeat("*",mb_strlen($firstStr,'utf-8')) . $firstStr2;
}
 
 
/**
* 替换字符串中的某些字符,仅替换一次,且替换内容必须在原始字符串内
* @param string $username 字符串
* @param string $find 替换内容
* @param string $replace 目标内容
* @param string 处理后的额字符串
*/
function str_replace_once($username,$find,$replace)
{   
    // 查询出字符串第一次出现的位置
    $pos = mb_strpos($username,$find);
    // 替换目标内的信息
    return substr_replace($username, $replace, $pos, strlen($find));
}
1mb_strlen()

功能:返回字符串的长度。优势: 可以通过设置字符编码从而返回对应的字符数,很好的处理了中文字符串的长度问题。 

语法:strlen(string $str,string $encoding)

str:字符串内容

encoding:编码格式   比如:gbk/utf8/gb2312/不填   不同的编码格式对于中文来讲长度不一样,默认为utf8

代码实例:

$str='33三三three';
echo strlen($str).'<br>';  //13   数字+中文+英文=2+6+5
echo mb_strlen($str,'utf8').'<br>';//9 //  数字+中文+英文=2+2+5
echo mb_strlen($str,'gbk').'<br>';//10   数字+中文+英文=2+3+5
echo mb_strlen($str,'gb2312').'<br>';//11     数字+中文+英文=2+4+5
2mb_substr()

功能:返回字符串的一部分,优势:适用于中文字符的分割

语法:mb_substr ( string $str , int $start , int $length ,string $encoding)

str:字符串内容

start:开始位置   正数 - 在字符串的指定位置开始;负数 - 在从字符串结尾的指定位置开始;0 - 在字符串中的第一个字符处开始

length:长度  正数 - 从 start 参数所在的位置返回  负数 - 从字符串末端返回

encoding:编码  比如:gbk/utf8/gb2312/不填   不同的编码格式对于中文来讲长度不一样,一般配合mb_strlen使用utf8

注意:1)、如果 start 参数是负数且 length 小于或等于 start,则 length 为 0

2)、一般来说仅使用utf8即可

代码实例

$str='33三三three';
echo mb_substr($str,0,3,'utf8').'<br>';  // 33三三
3str_repeat()

功能:把字符串重复指定次数

语法:str_repeat(string $str,int $repeat )

str:字符串

repeat:重复次数

代码示例

$str='33三三';
echo str_repeat($str,10).'<br>';  // 33三三33三三33三三33三三33三三33三三33三三33三三33三三33三三
4mb_stropos()

功能:查找字符串在另一字符串中第一次出现的位置(不区分大小写)

语法:mb_stropos(string $str,string $find,int $start,string $encoding)

str:原始字符串

find:查询内容

start:开始搜索位置,默认为0

encoding:编码格式  默认utf8   通常情况下使用utf8

代码示例

$str='33三二一';
echo mb_strpos($str,"一",0).'<br>';  //  4
echo mb_strpos($str,"一",0,'utf8').'<br>';//  4
echo mb_strpos($str,"一",0,'gbk').'<br>';//   5
5substr_replace()

功能:把字符串的一部分替换为另一个字符串

语法:substr_replace(string $str,string $replacement,int $start,int $length)

str:字符串信息

replacement:需要替换的字符串

start:开始位置

length:长度

echo substr_replace("天气晚来秋","沉",3,3);  // 天沉晚来秋

注:当为替换汉字时,需要注意一个汉字三个字节
4、根据二维数组中的某一个字段值进行排序
$rs = [
	'id'=>1,'name'=>'小张','is_sign'=>5,
	'id'=>2,'name'=>'小陈','is_sign'=>3,
	'id'=>3,'name'=>'小李','is_sign'=>2,
	'id'=>4,'name'=>'小王','is_sign'=>4,
];
$last_names = array_column($rs,'is_sign');
array_multisort($last_names,SORT_DESC,$rs); // SORT_ASC 升序
var_dump($rs);

5、统计一个数组中的元素个数以及统计一个数组中同一元素出现的次数
$r  = ['a','b','c'];

dump(count($r));   //结果:3


$b = ['a','b','a','c','a','c','a'];

dump(array_count_values($b));    //结果:array(3) { ["a"] => int(4) ["b"] => int(1) ["c"] => int(2)}

6、统计两个数组当中相同键值的个数,以及键值去重
public function vvv()
{
    // 数组一
    $arr1 = [1,2,5,7,10,13,13,13];
    // 数组二
    $arr2 = [2,4,7,8,13];
    // 取出相同的键值组成新的数组
    $res1=array_intersect($arr1,$arr2);
    var_dump($res1);  //array(5) { [1]=> int(2) [3]=> int(7) [5]=> int(13) [6]=> int(13) [7]=> int(13) }
    // 计算数量
    $count1 = count($res1);
    var_dump($count1);  //int(5)
    // 去掉相同的键值,得到键值不同的数组
    $res2 = array_unique($res1);
    var_dump($res2); //array(3) { [1]=> int(2) [3]=> int(7) [5]=> int(13) }
    // 计算数量
    var_dump(count($res2));  //int(3)
}
7、判断数组中是否存在一个键值,判断数组中是否存在一个键名
$a = ['nnn','mmm'];

$b = in_array('nnn',$a);

dump($b);   // 结果为bool(true)

$c = in_array('aaa',$a);

dump($c);    //结果为bool(false)



 $a = ['nnn'=>'ddd','mmm'=>'fff'];

 $b = array_key_exists('nnn',$a);

 dump($b);   // 结果为bool(true)

 $c = array_key_exists('aaa',$a);

 dump($c);    //结果为bool(false)



8、将图片转为base_64位编码格式以及将base64位普通编码转为图片保存到文件中
public function timeceshi()
{
    // 书写图片所在域名或者地址
    $img = 'http://www.lh.com/uploads/20181119/8760db7392380af20342e07813ad079.jpg';
    // file_get_contents()函数将所在文件读入一个字符串中,即将图片转化为普通字符串
    // base64_encode()函数将图片转化为base64位格式
    $base64_img = base64_encode(file_get_contents($img));

    // base64位编码转为图片保存在文件中
    // 设置生成的图片名称
    $imageName = "25220_".date("His",time())."_".rand(1111,9999).'.png';
    // 判断是否有逗号 如果有就截取后半部分
    if (strstr($base64_img,",")){
         $base64_img = explode(',',$base64_img);
         $base64_img = $base64_img[1];
    }
    // 设置图片保存路径
    $path = "./uploads/code/".date("Ymd",time());
    // 判断目录是否存在 不存在就创建 并赋予777权限
    if (!is_dir($path)){
         mkdir($path,0777,true);
    }
    // 拼接路径和图片名称
    $imageSrc= $path."/". $imageName;
     // 生成图片 返回的是字节数
     $r = file_put_contents($imageSrc, base64_decode($base64_img));
    
}
9、方形图片切圆接口操作 具体根据需要进行扩展
	// $imgpath: 为所要切图的访问地址 http://.....  返回值是图片数据流
    private function radiusImg($imgpath) {

        $src_img = null;
        $ext = pathinfo($imgpath);
        switch ($ext['extension']) {
            case 'jpg':
                $src_img = imagecreatefromjpeg($imgpath);
                break;
            case 'png':
                $src_img = imagecreatefrompng($imgpath);
                break;
            default:
                $str = $str = file_get_contents($imgpath);
                $src_img = imagecreatefromstring($str);
                break;
        }

        $wh = getimagesize($imgpath);
        $w  = $wh[0];
        $h  = $wh[1];

        $radius =  ($w) / 2;
        $img = imagecreatetruecolor($w, $h);
        //这一句一定要有
        imagesavealpha($img, true);
        //拾取一个完全透明的颜色,最后一个参数127为全透明
        $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
        imagefill($img, 0, 0, $bg);
        $r = $radius; //圆 角半径
            for ($x = 0; $x < $w; $x++) {
            for ($y = 0; $y < $h; $y++) {
                $rgbColor = imagecolorat($src_img, $x, $y);
                if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))) {
                    //不在四角的范围内,直接画
                    imagesetpixel($img, $x, $y, $rgbColor);
                } else {
                    //在四角的范围内选择画
                    //上左
                    $y_x = $r; //圆心X坐标
                    $y_y = $r; //圆心Y坐标
                    if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                        imagesetpixel($img, $x, $y, $rgbColor);
                    }
                    //上右
                    $y_x = $w - $r; //圆心X坐标
                    $y_y = $r; //圆心Y坐标
                    if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                        imagesetpixel($img, $x, $y, $rgbColor);
                    }
                    //下左
                    $y_x = $r; //圆心X坐标
                    $y_y = $h - $r; //圆心Y坐标
                    if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                        imagesetpixel($img, $x, $y, $rgbColor);
                    }
                    //下右
                    $y_x = $w - $r; //圆心X坐标
                    $y_y = $h - $r; //圆心Y坐标
                    if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                        imagesetpixel($img, $x, $y, $rgbColor);
                    }
                }
            }
        }
        return $img;
    }
10、php 计算字符串内中文数量和特殊字符数量 粗略计算——比较特殊的字符不计算在内
中文计算
public function chineseNum($str)
{
    return (strlen($str) - mb_strlen($str, "utf8")) / 2;
}
特殊字符计算
public function englishNum($str)
{
    return mb_strlen($str, 'utf8') - ((strlen($str) - mb_strlen($str, 'utf8')) / 2);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值