美文网首页我爱编程
PHP一些常用到的工具方法(有问题欢迎反馈)

PHP一些常用到的工具方法(有问题欢迎反馈)

作者: Mr_Z_Heng | 来源:发表于2018-07-26 14:54 被阅读0次

    1、二维数组按照指定字段排序

    /**

     * 排序二维数组

     * @param $arrUsers         排序数组

     * @param string $sortKey   排序字段

     * @param string $sortType  排序类型(升序,降序)

     * @return mixed

     */

    private function sortTwoArray($arrUsers,$sortKey='id',$sortType="SORT_DESC"){

       $arrSort = array();

       foreach($arrUsers AS $uniqid => $row){

         foreach($row AS $key=>$value){

             $arrSort[$key][$uniqid] = $value;

         }

       }

       if($sortType){

          array_multisort($arrSort[$sortKey], constant($sortType), $arrUsers);

       }

       return $arrUsers;

    }

    2、递归方法多维数组转为一维数组,键不变

    function arr_foreach ($arr)

    {

       static $tmp=array();

       if (!is_array ($arr))

        {

           return false;

       }

       foreach ($arr as $key=>$val )

        {

           if (is_array ($val))

            {

                arr_foreach ($val);

           }

           else

           {

               $tmp[$key]=trim($val);

           }

        }

       return $tmp;

    }

    3、获取经纬度

    function getLatlon($address){

       $url = "http://api.map.baidu.com/geocoder?address={$address}&output=json&key=MYQEYRx0KCRkEtvzKqOFutVk9gp0PNZx";

       $str = https_request($url);

       $res = json_decode($str,true);

       return $res['result']['location'];

    }

     4、CURL https请求方法

    /**

     * CURL https请求方法

     * @param $url

     * @param null $data

     * @return mixed

     */

    function https_request($url,$data = null){

       $c= curl_init();

       curl_setopt($c,CURLOPT_URL,$url);

       curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false);

       curl_setopt($c,CURLOPT_SSL_VERIFYHOST,false);

       // curl_setopt($c, CURLOPT_POST,true);

       if(!empty($data)){

            curl_setopt($c,CURLOPT_POST,1);

           curl_setopt($c,CURLOPT_POSTFIELDS,$data);//field

       }

        curl_setopt($c,CURLOPT_RETURNTRANSFER,1);

       $out = curl_exec($c);

       curl_close($c);

       return $out;

    }

    5、获取客户端IP地址

    /**

     * 获取客户端IP地址

     */

    functiongetClientIP()

    {

    static$ip= NULL;

    if($ip!== NULL)

    return$ip;

    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {

    $arr=explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);

    $pos=array_search('unknown',$arr);

    if(false !==$pos)

    unset($arr[$pos]);

    $ip=trim($arr[0]);

    }elseif(isset($_SERVER['HTTP_CLIENT_IP'])) {

    $ip=$_SERVER['HTTP_CLIENT_IP'];

    }elseif(isset($_SERVER['REMOTE_ADDR'])) {

    $ip=$_SERVER['REMOTE_ADDR'];

    }// IP地址合法验证 $ip = ( false !== ip2long($ip) ) ? $ip : '0.0.0.0'; return $ip;

    }

    6、多维数组转成一维

     function arr_foreach ($arr)

       {

          static $tmp=array();

          if (!is_array ($arr))

          {

             return false;

          }

          foreach ($arr as $key=>$val )

          {

             if (is_array ($val))

             {

                arr_foreach ($val);

             }

             else

             {

                $tmp[$key]=trim($val);

             }

          }

          return $tmp;

       }

    /*******************************************/

    7、正则匹配手机号

    /**

    * 正则匹配手机号

    * @param $mobile

    * @return bool

    */

    functionisMobile($mobile) {

    if(!is_numeric($mobile)) {

    return false;

    }

    returnpreg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,6,7,8]{1}\d{8}$|^18[\d]{9}$#',$mobile)? true : false;

    }

    8、远程图片存本地

    /**

    * 远程图片存本地

    * @param $url

    * @param string $saveName

    * @param string $path

    * @return string

    */

    public functionput_file_from_url_content($url,$saveName='tmp.png',$path='./Tmp/') {

    // 设置运行时间为无限制

    set_time_limit(0);

    $url=trim($url);

    $curl=curl_init();

    // 设置你需要抓取的URL

    curl_setopt($curl,CURLOPT_URL,$url);

    // 设置header

    curl_setopt($curl,CURLOPT_HEADER,0);

    // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。

    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);

    // 运行cURL,请求网页

    $file=curl_exec($curl);

    // 关闭URL请求

    curl_close($curl);

    // 将文件写入获得的数据

    $filename=$path.$saveName;

    $write= @fopen($filename,"w");

    if($write== false) {

    return false.'1';

    }

    if(fwrite($write,$file)== false) {

    return false.'2';

    }

    if(fclose($write)== false) {

    return false.'3';

    }

    return$filename;

    }

    9、字符串中的表情处理

    /**

    把用户输入的emoji表情转义(主要针对特殊符号和emoji表情)

    */

    function userTextEncode($str){

        if(!is_string($str))return $str;

        if(!$str || $str=='undefined')return '';

        $text = json_encode($str); //暴露出unicode

        $text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){

            return addslashes($str[0]);

        },$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。

        return json_decode($text);

    }

    /**

    emoji表情编码字符串 解码

    */

    function userTextDecode($str){

        $text = json_encode($str); //暴露出unicode

        $text = preg_replace_callback('/\\\\\\\\/i',function($str){

            return '\\';

        },$text); //将两条斜杠变成一条,其他不动

        return json_decode($text);

    }

    10、生成不重复的订单号

    /**

    * 生成不重复的订单号

    * (组成部分:年月日+订单类型代号+今天秒数+毫秒数)保证同一天同一秒内的订单编号不重复,同时可以区分订单类型

    * @param int $type

    * @return string

    */

    functionbuild_order_sn($type=1)

    {

        $date=date("Ymd");

        $second=(time()-strtotime(date("Y-m-d")))+10598;

        $float=microtime(true)*1000000;

        $float=str_replace(",","",number_format($float));

        $microtime=substr($float,-4,3);

        $order_sn=$date.$type.$second.$microtime;

        // return $order_sn;

        // $sn = str_replace(",","",number_format($order_sn));

        return$order_sn;//$date.$second.$microtime;

    }

    11、微信图片防盗链

    $url = $_GET["url"];    

    header('Content-type: image/jpeg');    

    $refer = "http://mp.weixin.qq.com/";    

    $opt = [            

        'http'=>[                

            'header'=>"Referer: " . $refer            

        ]           

    ];    

    $context = stream_context_create($opt);    

    $file_contents = file_get_contents($url,false, $context);   

     echo  $file_contents;

    12、图片缩放

    /**

    * 图片等比例缩放函数(以保存新图片的方式实现)

    * @param string $picName 被缩放的处理图片源

    * @param string $savePath 保存路径

    * @param int $maxx 缩放后图片的最大宽度

    * @param int $maxy 缩放后图片的最大高度

    * @param string $pre 缩放后图片的前缀名

    * @return $string 返回后的图片名称() 如a.jpg->s.jpg

    *

    **/

    function scaleImg($picName,$savePath, $maxx = 800, $maxy = 450)

    {

        $info = getimageSize($picName);//获取图片的基本信息

        $w = $info[0];//获取宽度

        $h = $info[1];//获取高度

        if($w<=$maxx&&$h<=$maxy){

            return $picName;

        }

        //获取图片的类型并为此创建对应图片资源

        switch ($info[2]) {

            case 1://gif

                $im = imagecreatefromgif($picName);

    break;

            case 2://jpg

                $im = imagecreatefromjpeg($picName);

    break;

            case 3://png

                $im = imagecreatefrompng($picName);

    break;

            default:

                die("图像类型错误");

        }

        //计算缩放比例

        if (($maxx / $w) > ($maxy / $h)) {

            $b = $maxy / $h;

        } else {

            $b = $maxx / $w;

        }

        //计算出缩放后的尺寸

        $nw = floor($w * $b);

        $nh = floor($h * $b);

        //创建一个新的图像源(目标图像)

        $nim = imagecreatetruecolor($nw, $nh);

        //透明背景变黑处理

        //2.上色

        $color=imagecolorallocate($nim,255,255,255);

        //3.设置透明

        imagecolortransparent($nim,$color);

        imagefill($nim,0,0,$color);

        //执行等比缩放

        imagecopyresampled($nim, $im, 0, 0, 0, 0, $nw, $nh, $w, $h);

        //输出图像(根据源图像的类型,输出为对应的类型)

        $picInfo = pathinfo($picName);//解析源图像的名字和路径信息

        $savePath = $savePath. "/" .date("Ymd")."/".'pre_' . $picInfo["basename"];

        switch ($info[2]) {

            case 1:

                imagegif($nim, $savePath);

    break;

            case 2:

                imagejpeg($nim, $savePath);

    break;

            case 3:

                imagepng($nim, $savePath);

    break;

        }

        //释放图片资源

        imagedestroy($im);

        imagedestroy($nim);

        //返回结果

        return $savePath;

    }

    13、图片裁剪成圆形

    /**

        * 将图片切成透明背景的圆形

        * @param $imgpath  原图地址

        * @param $filePath 结果保存路径

        * @return string

    */

        function yuanjiao($imgpath,$filePath){

            $ext = pathinfo($imgpath);

            $src_img = null;

            switch ($ext['extension']) {

                case 'jpg':

                    $src_img = imagecreatefromjpeg($imgpath);

    break;

                case 'png':

                    $src_img = imagecreatefrompng($imgpath);

    break;

            }

            $wh = getimagesize($imgpath);

    //    return $wh;

            $w = $wh[0];

            $h = $wh[1];

            $w = min($w, $h);

            $h = $w;

            $img = imagecreatetruecolor($w, $h);

            //这一句一定要有

            imagesavealpha($img, true);

            //拾取一个完全透明的颜色,最后一个参数127为全透明

            $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);

            imagefill($img, 0, 0, $bg);

            $r= $w/2; //圆半径

    //    return $r;

            $y_x = $r; //圆心X坐标

            $y_y = $r; //圆心Y坐标

            for ($x = 0; $x < $w; $x++) {

                for ($y = 0; $y < $h; $y++) {

                    $rgbColor = imagecolorat($src_img, $x, $y);

                    if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {

                        imagesetpixel($img, $x, $y, $rgbColor);

                    }

    }

    }

            imagepng($img, $filePath);

            return $filePath;

        }

    相关文章

      网友评论

        本文标题:PHP一些常用到的工具方法(有问题欢迎反馈)

        本文链接:https://www.haomeiwen.com/subject/oiivmftx.html