W3CAPI 在线教程 | 菜鸟教程_LOGO
文档目录
文档目录
我的书签
 

PHP

PHP 常用工具函数大全

软件开发中,我们经常要使用到一些自定义函数,比如:过滤特殊字符、日期格式转换、随机字符串生成等等,在PHP中当然也不例外,这里总结了PHP日常开发中用到的一些自定义函数,便于我们查阅。

W3CAPI
1
2020-04-24 07:39:45

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;
}

PHP 常用工具函数大全 | 日期转换为几天、分钟、小时前

我们使用某些社交软件的时候,经常会看到朋友们发布的一些内容时间为:几分钟前、几小时前、几天前等等,如何将日期时间转换为这种表现形式呢?代码如下:
//日期转换成几分钟、小时、年前
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 '刚刚';
        }
    }
}

PHP 常用工具函数大全 | 字符串长度截取

字符串截取固定数量的处理,我们在开发中会经常使用到。在内容类型的网站中,经常要对不固定的内容进行截取后显示,以便有一个合适的显示效果,代码如下:
//截取长度
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;
}

PHP 常用工具函数大全 | 生成随机字符串

随机字符串生成的应用也很普遍,我们经常可能需要给用户生成邀请码,激活码等等,在应用系统中起到一个标识作用,代码如下:
/**
 * 生成随机字符串,可以自己扩展,若想保持唯一性,只需在开头加上用户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;
    }
}

PHP 常用工具函数大全 | 计算当月有多少天

在一些应用中可能会计算某月有多少天数,比如金融系统需要按天计算利息、考试时间还有多少天等等,代码如下:
//计算该月有几天
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);
    }
}

PHP 常用工具函数大全 | 字符串过滤

我们在获取用户输入的时候需要过滤客户端传递过来的数据,因为所有的数据都存在不安全因素,必须保证我们数据的正确性,这就需要对获取的数据进行字符串的过滤,过滤掉一些存在安全隐患的字符,代码如下:
//非法字符过滤函数
function has_unsafeword_custom($str) {
    $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\|/";
    return preg_replace($regex,"",$str);
}

//去空格,以及字符添加斜杠
function str_trim_custom($value) {
    return addslashes(trim($value));
}
相关提问
敬请期待