PHP实用代码片断

几个简单又实用的PHP函数


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* * *************************
  * 生成随机字符串,可以自己扩展   //若想唯一,只需在开头加上用户id
  * $type可以为:upper(只生成大写字母),lower(只生成小写字母),number(只生成数字)
  * $len为长度,定义字符串长度
  * mark 2017/8/15
  * ************************** */
 
function _random( $type , $len = 0) {
     $new = '' ;
     $string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' //数据池
     if ( $type == 'upper' ) {
         for ( $i = 0; $i < $len ; $i ++) {
             $new .= $string [mt_rand(36, 61)];
         }
         return $new ;
     }
     if ( $type == 'lower' ) {
         for ( $i = 0; $i < $len ; $i ++) {
             $new .= $string [mt_rand(10, 35)];
         }
         return $new ;
     }
     if ( $type == 'number' ) {
         for ( $i = 0; $i < $len ; $i ++) {
             $new .= $string [mt_rand(0, 9)];
         }
         return $new ;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//计算该月有几天
function getdaysInmonth( $month , $year ) {
     $days = '' ;
     if ( $month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12)
         $days = 31;
     else if ( $month == 4 || $month == 6 || $month == 9 || $month == 11)
         $days = 30;
     else if ( $month == 2) {
         if (isLeapyear( $year )) {
             $days = 29;
         } else {
             $days = 28;
         }
     }
     return ( $days );
}
 
//判断是否为润年
function isLeapyear( $year ) {
     if ((( $year % 4) == 0) && (( $year % 100) != 0) || (( $year % 400) == 0)) {
         return (true);
     } else {
         return (false);
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//生成订单15位
function auto_order( $ord = 0) {
     //自动生成订单号  传入参数为0 或者1   0为本地  1为线上订单
     if ( $ord == 0) {
         $str = '00' . time() . rand(1000, 9999); //00 本地订单
     } else {
         $str = '99' . time() . rand(1000, 9999);  //11 线上订单
     }
     return $str ;
}
 
//生成订单15位
function auto_new_order( $ord = 0) {
     srand(time());
     //自动生成订单号  传入参数为0 或者1   0为本地  1为线上订单
     if ( $ord == 0) {
         $str = '00' . time() . mt_rand(100000,999999); //00 本地订单
     } else {
         $str = '11' . time() . mt_rand(100000,999999);  //11 线上订单
     }
     return $str ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
  * 检测是否为UTF8编码
  * @param $string 检测字符串
  * @return bool
  */
function is_utf8( $string ) {
     return preg_match('%^(?:
           [\x09\x0A\x0D\x20-\x7E]            # ASCII
         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
     )*$%xs', $string );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//处理json字符中的特殊字符
function getJsonToArr( $result , $return_array =true)
{
         $tempArr = NULL;
         $result = preg_replace( '/([^\\\])(":)(\d{9,})(,")/i' , '${1}${2}"${3}"${4}' , $result ); //taobao bug,number >2^32
         $tempArr = json_decode( $result , $return_array );
         if ( $tempArr == NULL) {
             $patterns = array ( '/,+\s*\}/' , '/,+\s*\]/' , '/"\s+|\s+"/' , '/\n|\r|\t/' , '/\\\/' , '/ss+/' );
             $replacements = array ( '}' , ']' , '"' , ' ' , '' , ' ' );
             $result = preg_replace( $patterns , $replacements , $result );         
             $tempArr = json_decode( $result , $return_array );
         }
 
         return $tempArr ;
}
 
 
//非法字符过滤函数
function has_unsafeword( $str ) {
     $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\|/" ;
     return preg_replace( $regex , "" , $str );  
}
 
//去空格,以及字符添加斜杠
function _trim(& $value ) {
     Return addslashes (trim( $value ));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
  * 将多维数组转为一维数组
  * @param array $arr
  * @return array
  */
function ArrMd2Ud( $arr ) {
     #将数值第一元素作为容器,作地址赋值。
     $ar_room = & $arr [key( $arr )];
     #第一容器不是数组进去转呀
     if (! is_array ( $ar_room )) {
         #转为成数组
         $ar_room = array ( $ar_room );
     }
     #指针下移
     next( $arr );
     #遍历
     while (list( $k , $v ) = each( $arr )) {
         #是数组就递归深挖,不是就转成数组
         $v = is_array ( $v ) ? call_user_func( __FUNCTION__ , $v ) : array ( $v );
         #递归合并
         $ar_room = array_merge_recursive ( $ar_room , $v );
         #释放当前下标的数组元素
         unset( $arr [ $k ]);
     }
     return $ar_room ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
  * 判断是PC端还是wap端访问
  * @return type判断手机移动设备访问
  */
function isMobile()
{
     // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
     if (isset ( $_SERVER [ 'HTTP_X_WAP_PROFILE' ]))
     {
         return true;
     }
     // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
     if (isset ( $_SERVER [ 'HTTP_VIA' ]))
     {
         // 找不到为flase,否则为true
         return stristr ( $_SERVER [ 'HTTP_VIA' ], "wap" ) ? true : false;
     }
     // 脑残法,判断手机发送的客户端标志,兼容性有待提高
     if (isset ( $_SERVER [ 'HTTP_USER_AGENT' ]))
     {
         $clientkeywords = array ( 'nokia' ,
             'sony' ,
             'ericsson' ,
             'mot' ,
             'samsung' ,
             'htc' ,
             'sgh' ,
             'lg' ,
             'sharp' ,
             'sie-' ,
             'philips' ,
             'panasonic' ,
             'alcatel' ,
             'lenovo' ,
             'iphone' ,
             'ipod' ,
             'blackberry' ,
             'meizu' ,
             'android' ,
             'netfront' ,
             'symbian' ,
             'ucweb' ,
             'windowsce' ,
             'palm' ,
             'operamini' ,
             'operamobi' ,
             'openwave' ,
             'nexusone' ,
             'cldc' ,
             'midp' ,
             'wap' ,
             'mobile'
             );
         // 从HTTP_USER_AGENT中查找手机浏览器的关键字
         if (preg_match( "/(" . implode( '|' , $clientkeywords ) . ")/i" , strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ])))
         {
             return true;
         }
     }
     // 协议法,因为有可能不准确,放到最后判断
     if (isset ( $_SERVER [ 'HTTP_ACCEPT' ]))
     {
         // 如果只支持wml并且不支持html那一定是移动设备
         // 如果支持wml和html但是wml在html之前则是移动设备
         if (( strpos ( $_SERVER [ 'HTTP_ACCEPT' ], 'vnd.wap.wml' ) !== false) && ( strpos ( $_SERVER [ 'HTTP_ACCEPT' ], 'text/html' ) === false || ( strpos ( $_SERVER [ 'HTTP_ACCEPT' ], 'vnd.wap.wml' ) < strpos ( $_SERVER [ 'HTTP_ACCEPT' ], 'text/html' ))))
         {
             return true;
         }
     }
     return false;
}
//判断是否为安卓手机
public function isAndroid()
{
     if (isset( $_SERVER [ 'HTTP_USER_AGENT' ])){
         $agent = strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]);
         if ( strpos ( $agent , 'android' ) !== false)
             return true;
     }
     return false;
}
//判断是否为iphone或者ipad
public function isIos()
{
     if (isset( $_SERVER [ 'HTTP_USER_AGENT' ])){
         $agent = strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]);
         if ( strpos ( $agent , 'iphone' )|| strpos ( $agent , 'ipad' ))
             return true;
     }
     return false;
}
//判断是否为微信内置浏览器打开
public function isWechet()
{
     if (isset( $_SERVER [ 'HTTP_USER_AGENT' ]) && strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MicroMessenger' ) !== false){
         return true;
     }
     return false;
}
//整合到一起,判断当前设备,1:安卓;2:IOS;3:微信;0:未知
public function isDevice()
{
     if ( $_SERVER [ 'HTTP_USER_AGENT' ]){
         $agent = strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]);
         if ( strpos ( $agent , 'micromessenger' ) !== false)
             return 3;
         elseif ( strpos ( $agent , 'iphone' )|| strpos ( $agent , 'ipad' ))
             return 2;
         else
             return 1;
     }
     return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
  * 日期转换成几分钟前
  */
public function formatTime( $date ) {
     $timer = strtotime ( $date );
     $diff = $_SERVER [ 'REQUEST_TIME' ] - $timer ;
     $day = floor ( $diff / 86400);
     $free = $diff % 86400;
     if ( $day > 0) {
         if (15 < $day && $day <30){
             return "半个月前" ;
         } elseif (30 <= $day && $day <90){
             return "1个月前" ;
         } elseif (90 <= $day && $day <187){
             return "3个月前" ;
         } elseif (187 <= $day && $day <365){
             return "半年前" ;
         } elseif (365 <= $day ){
             return "1年前" ;
         } else {
             return $day . "天前" ;
         }
     } else {
         if ( $free >0){
             $hour = floor ( $free / 3600);
             $free = $free % 3600;
             if ( $hour >0){
                 return $hour . "小时前" ;
             } else {
                 if ( $free >0){
                     $min = floor ( $free / 60);
                     $free = $free % 60;
                 if ( $min >0){
                     return $min . "分钟前" ;
                 } else {
                     if ( $free >0){
                         return $free . "秒前" ;
                     } else {
                         return '刚刚' ;
                     }
                 }
                 } else {
                     return '刚刚' ;
                 }
             }
         } else {
             return '刚刚' ;
         }
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
  * 截取长度
  */
public function getSubString( $rawString , $length = '100' , $etc = '...' , $isStripTag =true){
     $rawString = str_replace ( '_baidu_page_break_tag_' , '' , $rawString );
     $result = '' ;
     if ( $isStripTag )
         $string = html_entity_decode(trim( strip_tags ( $rawString )), ENT_QUOTES, 'UTF-8' );
     else
         $string = trim( $rawString );
     $strlen = strlen ( $string );
     for ( $i = 0; (( $i < $strlen ) && ( $length > 0)); $i ++){
         if ( $number = strpos ( str_pad ( decbin (ord( substr ( $string , $i , 1))), 8, '0' , STR_PAD_LEFT), '0' ))
         {
             if ( $length < 1.0){
                 break ;
             }
             $result .= substr ( $string , $i , $number );
             $length -= 1.0;
             $i += $number - 1;
         } else {
             $result .= substr ( $string , $i , 1);
             $length -= 0.5;
         }
     }
     if ( $isStripTag )
         $result = htmlspecialchars( $result , ENT_QUOTES, 'UTF-8' );
         
     if ( $i < $strlen ){
         $result .= $etc ;
     }
     return $result ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
  * utf-8和gb2312自动转化
  * @param unknown $string
  * @param string $outEncoding
  * @return unknown|string
  */
function safeEncoding( $string , $outEncoding = 'UTF-8' )
{
     $encoding = "UTF-8" ;
     for ( $i = 0; $i < strlen ( $string ); $i ++) {
         if (ord ( $string { $i } ) < 128)
             continue ;
 
         if ((ord ( $string { $i } ) & 224) == 224) {
             // 第一个字节判断通过
             $char = $string {++ $i };
             if ((ord ( $char ) & 128) == 128) {
                 // 第二个字节判断通过
                 $char = $string {++ $i };
                 if ((ord ( $char ) & 128) == 128) {
                     $encoding = "UTF-8" ;
                     break ;
                 }
             }
         }
         if ((ord ( $string { $i } ) & 192) == 192) {
             // 第一个字节判断通过
             $char = $string {++ $i };
             if ((ord ( $char ) & 128) == 128) {
                 // 第二个字节判断通过
                 $encoding = "GB2312" ;
                 break ;
             }
         }
     }
 
     if ( strtoupper ( $encoding ) == strtoupper ( $outEncoding ))
         return $string ;
     else
         return @iconv ( $encoding , $outEncoding , $string );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
  *对内容中的关键词添加链接
  *只处理第一次出现的关键词,对已有链接的关键不会再加链接,支持中英文
  *$content:string 原字符串
  *$keyword:string  关键词
  *$link:string,链接
  */
function yang_keyword_link( $content , $keyword , $link ){
      //排除图片中的关键词
      $content = preg_replace( '|(<img[^>]*?)(' . $keyword . ')([^>]*?>)|U' , '$1%&&&&&%$3' , $content );
      $regEx = '/(?!((<.*?)|(<a.*?)))(' . $keyword . ')(?!(([^<>]*?)>)|([^>]*?<\/a>))/si' ;
      $url = '<a href="' . $link . '" target="_blank" class="content_guanjianci">' . $keyword . '</a>' ;
      $content = preg_replace( $regEx , $url , $content ,1);
      //还原图片中的关键词
      $content = str_replace ( '%&&&&&%' , $keyword , $content );
      return $content ;
  }

猜你喜欢

转载自www.cnblogs.com/yuanscn/p/11032299.html