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

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;

    }

/**

* 生成随机邀请码

*@returnstring

*/

functionmakeCode() {

    $code='ABCDEFGHIJKLMNOPQRSTUVWXYZ';

   $rand=$code[rand(0,25)]

        .strtoupper(dechex(date('m')))

        .date('d').substr(time(),-5)

        .substr(microtime(),2,5)

        .sprintf('%02d',rand(0,99));

   for(

       $a= md5($rand,true),

       $s='0123456789ABCDEFGHIJKLMNOPQRSTUV',

       $d='',

       $f=0;

       $f<8;

       $g= ord($a[$f] ),

       $d.=$s[ ($g^ ord($a[$f+8] ) ) -$g&0x1F],

       $f++

    );

   return$d;

}

/**

* 生成纯数字的用户的唯一UUID

*@param$length    中间数字长度

*@param$uid    上一个用户的自增ID--参照

*@returnstring

*/

functionmakeUid($uid,$length=3){

   $info="";

   $pattern='12345678900987654321123456789012345';

   for($i=0;$i<$length;$i++) {

       $info.=$pattern{mt_rand(0,35)};   //生成php随机数

   }

   $len= strlen($uid);

   $mid= (int)($len/2);

   $prefix= (int)substr($uid,0,$mid);

   $endfix= (int)substr($uid,$mid);

   return$prefix.$info.$endfix;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 转载自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce阅读 2,262评论 1 5
  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能...
    司马东阳阅读 1,435评论 0 6
  • 幸福的生活就是两人周末窝在沙发里静静的看书,聊天,感受着空气中流动的宁静和心灵的默契。 幸福的生活就是牵着手漫步在...
    秦小荷阅读 411评论 2 3
  • 我一直再想一个问题,人这辈子从恋爱到结婚到生孩子到底是因为什么?是感情?责任?还是根深蒂固的一定得成家立业的思想....
    阿童木麻麻阅读 199评论 0 1