软件开发中,我们经常要使用到一些自定义函数,比如:过滤特殊字符、日期格式转换、随机字符串生成等等,在PHP中当然也不例外,这里总结了PHP日常开发中用到的一些自定义函数,便于我们查阅。
//将多维数组转为一维数组 function ArrMd2Ud($arr) { #将数值第一元素作为容器,作地址赋值 $index = key($arr); $ar_room = &$arr[$index]; #第一容器不是数组进行转换 if (!is_array($ar_room)) { #转为成数组 $ar_room = array($index=>$ar_room); } #指针下移 next($arr); #遍历 while (list($k, $v) = each($arr)) { #是数组就递归深挖,不是就转成数组 $v = is_array($v) ? call_user_func(__FUNCTION__, $v) : array($k=>$v); #递归合并 $ar_room = array_merge_recursive($ar_room, $v); #释放当前下标的数组元素 unset($arr[$k]); } return $ar_room; }
//日期转换成几分钟、小时、年前 function formatTime($date,$now="") { $now = $now ? $now : $_SERVER['REQUEST_TIME']; $timer = is_numeric($date)?$date:strtotime($date); $diff = $now - $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 '刚刚'; } } }
//截取长度 function str_split_custom($rawString,$length='100',$etc = '...',$isStripTag=true){ $result = ''; if($isStripTag) //截取前是否去除HTML标签 $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; }
/** * 生成随机字符串,可以自己扩展,若想保持唯一性,只需在开头加上用户id * $type可以为:upper(只生成大写字母),lower(只生成小写字母),number(只生成数字) * $len为长度,定义字符串长度 */ function str_random_custom($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; } }
//计算该月有几天 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); } }
//非法字符过滤函数 function has_unsafeword_custom($str) { $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\|/"; return preg_replace($regex,"",$str); } //去空格,以及字符添加斜杠 function str_trim_custom($value) { return addslashes(trim($value)); }