一些常见的公共方法THINKPHP

<?php

//判断是否为手机登录
if (\think\Request::instance()->isMobile()) {
    define('VIEW_PATH', __DIR__ . '/../application/admin/mobile/');
} else {
    define('VIEW_PATH', __DIR__ . '/../application/admin/view/');
}

/**
 * 模拟tab产生空格
 * @param int $step
 * @param string $string
 * @param int $size
 * @return string
 */
function tab($step = 1, $string = ' ', $size = 4){
    return str_repeat($string, $size * $step);
}


//系统配置的处理
function extraconfig($arr = [], $file)
{
    if (is_array($arr)) {
        $filename = $file . EXT;

        $filepath = APP_PATH . 'extra/' . $filename;
        if (!file_exists($filepath)) {
            $conf = "<?php return [];";
            file_put_contents($filepath, $conf);
        }

        $conf = include $filepath;
        foreach ($arr as $key => $value) {
            $conf[$key] = $value;
        }

        $time = date('Y/m/d H:i:s');
        $str = "<?php\r\n/**\r\n * 由公共方法extraconfig建立.\r\n * $time\r\n */\r\nreturn [\r\n";
        foreach ($conf as $key => $value) {
            $str .= "\t'$key' => '$value',";
            $str .= "\r\n";
        }
        $str .= '];';
        file_put_contents($filepath, $str);
        return true;
    } else {
        return false;
    }
}

//json 验证是否为合法json
function json_validate($string)
{
    return is_array(json_decode($string));
}

//验证是几维数组
function is_array_vd($array)
{
    $s = 1;//默认为1为数组
    foreach ($array as $value) {
        if (is_array($value)) {
            $s = 2;
            foreach ($value as $item) {
                if (is_array($item)) {
                    $s = 3;
                }
            }
        }
    }
    return $s;
}


/**将指定时间区间中的每一天日期以数组方式返回 不计算时分秒
 * @param $start_date
 * @param $end_date
 * @return array
 */
function date_rang($start_date, $end_date)
{
    return array_map(function ($n) {
        return date('Y-m-d', $n);
    }, range(strtotime($start_date), strtotime($end_date), 24 * 3600));
}

/*
 * 获取日期对应的星期
 * 参数$date为输入的日期数据,格式如:2018-6-22
 */
function get_week($date)
{
    //强制转换日期格式
    $date_str = date('Y-m-d', strtotime($date));
    //封装成数组
    $arr = explode("-", $date_str);
    //参数赋值
    //年
    $year = $arr[0];
    //月,输出2位整型,不够2位右对齐
    $month = sprintf('%02d', $arr[1]);
    //日,输出2位整型,不够2位右对齐
    $day = sprintf('%02d', $arr[2]);
    //时分秒默认赋值为0;
    $hour = $minute = $second = 0;
    //转换成时间戳
    $strap = mktime($hour, $minute, $second, $month, $day, $year);
    //获取数字型星期几
    $number_wk = date("w", $strap);
    //自定义星期数组
    $weekArr = array("日", "一", "二", "三", "四", "五", "六");
    //获取数字对应的星期
    return $weekArr[$number_wk];
}


/*
 *zxh2019.4.12add
 */
function getCondition()
{
    return $usecondition = ['status' => 1, 'isdelete' => 0];
}

/**
 * 获取时间的开始到结束 年 月 日期  时间
 * @param $year
 * @return array
 */
function gettimes($year)
{
    $smonth = 1;
    $emonth = 12;
    $startTime = $year . '-' . $smonth . '-1 00:00:00';
    $em = $year . '-' . $emonth . '-1 23:59:59';
    $endTime = date('Y-m-t H:i:s', strtotime($em));
    return array('stime' => strtotime($startTime), 'etime' => strtotime($endTime));
}

function getMonthTimeToStr($yearMonth)
{
    $startTime = $yearMonth."-01";
    $endTime = date('Y-m-d', strtotime("$startTime +1 month -1 day"));
    return ['stime' => strtotime($startTime.' 00:00:00'), 'etime' => strtotime($endTime.' 23:59:59')];
}


function getIsoWeeksInYear($year)
{
    $date = new DateTime;
    $date->setISODate($year, 53);

    return ($date->format("W") === "53" ? 53 : 52);
}

function weekday($custom_date)
{
    $week_start = date('d-m-Y', strtotime('this week monday', $custom_date));
    $week_end = date('d-m-Y', strtotime('this week sunday', $custom_date));
    $week_array[0] = $week_start;
    $week_array[1] = $week_end;

    return $week_array;
}

/**
 * 数组分组
 * @param $array
 * @param $week
 * @return array
 */
function array_val_chunk($array, $week)
{
    $list = array();
    foreach ($array as $key => $val) {
        $list[$val[$week]]["data"][] = $val;
//        $list[$val[$week]] = $val;
    }
    $ret = array();
    foreach ($list as $key => $value) {
        array_push($ret, $value);
    }
    return $ret;
}


/**
 * 音频时长获取
 */
function mp3Time($file)
{
    $m = new Mp3file($file);
    $a = $m->get_metadata();
    return $a['Length mm:ss'] ? $a['Length mm:ss'] : 0;
}

function mp3Info($file)
{
    $m = new Mp3file($file);
    return $m->get_metadata();
}

/**
 * 手机号验证
 */
function isMobile($value)
{
    $rule = '/^0?(13|14|15|16|17|18|19)[0-9]{9}$/';
    $result = preg_match($rule, $value);
    if ($result) {
        return true;
    } else {
        return false;
    }
}

//获取指定下标相同值的次数
function array_count_values_keys($arr, $key_arr)
{
    $key = 0;
    if ($key_arr) {
        foreach ($arr as $kk => $vo) {
            foreach ($key_arr as $k => $item) {
                if ($vo == $item) {
                    $key++;
                }
            }
        }

        return $key;
    }

//    return "请指定键值";
}

//获取两个时间的相差时间
function timediff($begin_time, $end_time)
{
    if ($begin_time < $end_time) {
        $starttime = $begin_time;
        $endtime = $end_time;
    } else {
        $starttime = $end_time;
        $endtime = $begin_time;
    }
    //计算天数
    $timediff = $endtime - $starttime;
    $days = intval($timediff / 86400);
    //计算小时数
    $remain = $timediff % 86400;
    $hours = intval($remain / 3600);
    //计算分钟数
    $remain = $remain % 3600;
    $mins = intval($remain / 60);
    //计算秒数
    $secs = $remain % 60;
    $res = array("day" => $days, "hour" => $hours, "min" => $mins, "sec" => $secs);
    return $res;
}


/**判断一维数组中指定值是否存在 存在返回该值 不存在返回空
 * @param $string
 * @param $arr
 * @return string
 */
function in_array_string($arr, $string)
{
    if (isset($arr[$string])) {
        return $arr[$string];
    }
    return "";

}

/**获取时间范围  昨天 今天  明天  上周  下周
 * @return array
 */
function period_time()
{

    $time = [];
    //php获取昨日起始时间戳和结束时间戳

    $time["firstDay"][] = $firstBeginDay = date("Y-m-d 00:00:00", mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')));
    $time["firstDay"][] = $firstEndDay = date("Y-m-d 23:59:59", mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 1);

    //php获取今日开始时间戳和结束时间戳
    $time["Today"][] = date("Y-m-d 00:00:00", mktime(0, 0, 0, date('m'), date('d'), date('Y')));
    $time["Today"][] = date("Y-m-d 23:59:59", mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1);

    //明天开始时间UNIX时间戳
    $time["lastday"][] = date("Y-m-d 00:00:00", mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')));
    $time["lastday"][] = date("Y-m-d 23:59:59", mktime(23, 59, 59, date('m'), date('d') + 1, date('Y')));


    //php获取上周起始时间戳和结束时间戳
    $time["firstWeek"][] = date("Y-m-d 00:00:00", mktime(0, 0, 0, date('m'), date('d') - date('w') + 1 - 7, date('Y')));
    $time["firstWeek"][] = date("Y-m-d 23:59:59", mktime(23, 59, 59, date('m'), date('d') - date('w') + 7 - 7, date('Y')));


//    //php获取下周时间戳和结束时间戳
//    $time["lastWeek"][] = date("Y-m-d 00:00:00", mktime(0, 0, 0, date('m'), date('d') + (7 - date('w')) + 1, date('Y')));
//    $time["lastWeek"][] = date("Y-m-d 23:59:59", mktime(23, 59, 59, date('m'), date('d') + (7 - date('w')) + 7, date('Y')));

    //php获取下周时间戳和结束时间戳
    $time["lastWeek"][] = date('Y-m-d 00:00:00',mktime(0,0,0,date("m"),date("d")-date("w")+1,date("Y")));
    $time["lastWeek"][] = date('Y-m-d 23:59:59',mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y")));


    return $time;

}


/**获取时间范围  昨天 今天  明天  上周  下周
 * @return array
 * 在patientCallback控制器用到
 */
function period_cbtime()
{

    $time = [];
    //php获取昨日起始时间戳和结束时间戳

    $time["firstDay"][] = $firstBeginDay = date("Y-m-d", mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')));
    $time["firstDay"][] = $firstEndDay = date("Y-m-d", mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 1);

    //php获取今日开始时间戳和结束时间戳
    $time["Today"][] = date("Y-m-d", mktime(0, 0, 0, date('m'), date('d'), date('Y')));
    $time["Today"][] = date("Y-m-d", mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1);

    //明天开始时间UNIX时间戳
    $time["lastday"][] = date("Y-m-d", mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')));
    $time["lastday"][] = date("Y-m-d", mktime(23, 59, 59, date('m'), date('d') + 1, date('Y')));


    $data = get_lastweek($begin='beginLastweek',$end='endLastweek',$week_start_num=0, time());

    //php获取上周起始时间戳和结束时间戳
    $time["firstWeek"][] = $data[0];
    $time["firstWeek"][] = $data[1];



    //php获取下周时间戳和结束时间戳
    $time["lastWeek"][] = date('Y-m-d',mktime(0,0,0,date("m"),date("d")-date("w")+1,date("Y")));
    $time["lastWeek"][] = date('Y-m-d',mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y")));

    return $time;

};

    function week()
{
    $beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
    $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
    return  [date('Y-m-d',$beginLastweek),date('Y-m-d',$endLastweek)];

}
//获取上周开始结束时间
function get_lastweek($begin = 'beginLastweek', $end = 'endLastweek', $week_start_num = 1, $now_time = '')
{
    $beginWeek = mktime(0,0,0,date("m"),date("d")-date("w")+1-14,date("Y"));
    $endWeek = mktime(23,59,59,date("m"),date("d")-date("w")+7-14,date("Y"));
    return  [date('Y-m-d',$beginWeek),date('Y-m-d',$endWeek)];
}


//ajax 参数返回

function _return_Ajax($msg, $code, $data)
{
    $data["msg"] = $msg;
    $data["code"] = $code;
    $data["data"] = $data;
    echo json_encode($data);
    exit();
}

/*
 *删除文件夹及里面的文件function
 *传入文件夹的路径
 */
function deleteDir($dir)
{
    if (!$handle = @opendir($dir)) {
        return false;
    }
    while (false !== ($file = readdir($handle))) {
        if ($file !== "." && $file !== "..") {       //排除当前目录与父级目录
            $file = $dir . '/' . $file;
            if (is_dir($file)) {
                deleteDir($file);
            } else {
                @unlink($file);
            }
        }
    }
    @rmdir($dir);

}

 /**
	* 判断指定key是否存在数组中
	*/
function in_array_key($arr, $keyval)
{
    $renturn = [];
    if (!empty($arr)) {
        foreach ($arr as $k => $item) {
            if ($keyval === $item) {
                $renturn["val"] = $item;
                $renturn["keyId"] = $k;
                return $renturn;
            }
        }
    }
}


// 字符串长出按...显示
function subtext($text, $length)
{
    if (mb_strlen($text, 'utf8') > $length)
        return mb_substr($text, 0, $length, 'utf8') . ' …';
    return $text;
}

/**
 * 字符串匹配 return [true | false]
 * @param string $text
 * @param string $host
 * @return bool
 */
function all_external_link($text = '', $host = '')
{
    if (strpos($text, $host) !== false) {
        return true;
    } else {
        return false;
    }
}

/**
 * @param $url
 * @param string $post
 * @param string $cookie
 * @param int $returnCookie
 * @return mixed|string
 *///参数1:访问的URL,参数2:post数据(不填则为GET),参数3:提交的$cookies,参数4:是否返回$cookies
function curl_request($url, $post = '', $cookie = '', $returnCookie = 0)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    curl_setopt($curl, CURLOPT_REFERER, "http://XXX");
    if ($post) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
    }
    if ($cookie) {
        curl_setopt($curl, CURLOPT_COOKIE, $cookie);
    }
    curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)) {
        return curl_error($curl);
    }
    curl_close($curl);
    if ($returnCookie) {
        list($header, $body) = explode("\r\n\r\n", $data, 2);
        preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
        $info['cookie'] = substr($matches[1][0], 1);
        $info['content'] = $body;
        return $info;
    } else {
        return $data;
    }
}

/**
 * 获取今日时间的开始时间到结束时间
 * @return array
 */
function _today()
{
    $t = time();
    $start = mktime(0, 0, 0, date("m", $t), date("d", $t), date("Y", $t));
    $end = mktime(23, 59, 59, date("m", $t), date("d", $t), date("Y", $t));
    return $today = ['start' => $start, 'end' => $end];
}

/**
 * 过滤script 脚本
 */
function _verify_script($str){
    $preg = "/<script[\s\S]*?<\/script>/i";
    return preg_replace($preg, "", $str);
}

/**
 * 正则处理时间 转换为数组
 * @param $get
 * @return mixed
 */
function timeRegular($get)
{
    $preg = '/(?:19|20)?(?:[0-9]{2})?(?:-|\s|\/|.|年)?(?:0[1-9]|1[012])(?:-|\s|\/|.|月)(?:0[1-9]|[12][0-9]|3[01])(?:日)?\s?(?:[01][0-9]|2[1-4])?:?(?:[0-6]?[0-9])?:?(?:[0-6]?[0-9])?/i';
    preg_match_all($preg, $get, $time);
    return $time;
}

//判断是否为手机访问
function is_mobile(){

    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
        return true;
    //此条摘自TPM智能切换模板引擎,适合TPM开发
    if (isset ($_SERVER['HTTP_CLIENT']) && 'PhoneClient' == $_SERVER['HTTP_CLIENT'])
        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;

}

;

//指定年 月份 获取下面的日期
function _day_arr($month, $year)
{
    $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
    //获取指定年份 指定月的天数
    $dayarr = [];
    for ($i = 1; $i <= $days; $i++) {
        $dayarr[$i] = $i;
    }
    return $dayarr;
}

//字符模糊匹配
function strLike($str1, $str2)
{
    preg_match("/".$str2."/", $str1, $regs);
    if (!empty($regs)) {
        return true;
    } else {
        return false;
    }
}

/**
 * 数组指定键判断值是否有重复
 * @param $arr
 * @param $keys
 * @return array
 */
function getRepeat($arr, $keys)
{
    $unique_arr = array();
    $repeat_arr = array();
    foreach ($arr as $k => $v) {
        $str = "";
        foreach ($keys as $a => $b) {
            $str .= "{$v[$b]},";
        }
        if (!in_array($str, $unique_arr)) {
            $unique_arr[] = $str;
        } else {
            $repeat_arr[$k] = $v;
        }
    }
    return $repeat_arr;
}

/**
 * 二维数组根据键名去重
 * 返回arr
 */
function arrays_unique($arr, $key) {
    $tmp_arr = array();
    foreach ($arr as $k => $v) {
        if (in_array($v[$key], $tmp_arr)) {
            unset($arr[$k]);
        } else {
            $tmp_arr[] = $v[$key];
        }
    }
    return $arr;
}

//三维转二维
function array3_to_array2($array){
    $array = array_filter($array);
    $array = array_values($array);
    foreach ($array as $orderKey =>$orderVal){
        $count = count($orderVal);
        if($count > 1){
            for ($i = 0;$i < $count;$i++){
                $tempArr[] = $orderVal[$i];
            }
        }else{
            $tempArr[] = $orderVal[0];
        }
    }
    return $tempArr;
}


//打开文件(仅限文本文件)
function openfiles($data){
    $myfile = fopen($data, "r") or die("Unable to open file!");
    $content = fread($myfile,filesize($data));
    fclose($myfile);
    return $content;
}


/*
 * 将二维数组按日期(支持Ymd和Ynj格式日期)排序
 * order_date_array(原始二维数组, desc还是asc, 日期在二维数组中的键)
 * */
function order_date_array($array, $order, $key){

    if (!$array){
        return [];
    }else{
        $_array = $array;
    }

    if (!$order){
        $_order = 'desc';
    }else{
        $_order = $order;
    }

    if (!$key){ // 二维数据中的Ynj日期的键
        $_key = 'date';
    }else{
        $_key = $key;
    }

    $new_array = [];
    $array_1 = [];
    $array_2 = [];

    // 日期转时间戳
    for ($t=0; $t<count($_array); $t++){
        $date = strtotime($_array[$t][$_key]); // Ymd或者Ynj格式日期转时间戳
        $array_1[] = $date;
        $array_2[] = $date;
    }
    // 排列方式
    if ($_order === 'desc'){ // 降序
        rsort($array_2);
    }else{ // 升序
        sort($array_2);
    }
    // 重新排序原始数组
    for ($r=0; $r<count($array_2); $r++){
        $index = array_search($array_2[$r], $array_1); // 元素索引
        $new_array[] = $_array[$index];
    }

    return $new_array;
}


/*
 *关于2038年以上的时间戳转换问题
 */
function dateToUnix($date){
    $datetime = new \DateTime($date);
    return $datetime->format('U');
}
function unixToTime($unix,$type="Y-m-d H:i:s"){
    $unix = $unix+8*3600;
    $datetime = new \DateTime("@$unix");
    return $datetime->format($type);
}

function _getFirstCharter($str){
    if(empty($str)){return '';}
    $fchar=ord($str{0});
    if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0});
    try{
        $s1=iconv('UTF-8','gb2312',$str);
        $s2=iconv('gb2312','UTF-8',$s1);
    }catch (\Exception $e){
        $s1=iconv('UTF-8','GBK',$str);
        $s2=iconv('GBK','UTF-8',$s1);
    }
//        $s1=iconv('UTF-8','gb2312',$str);
//        $s2=iconv('gb2312','UTF-8',$s1);

    $s=$s2==$str?$s1:$str;
    $asc=ord($s{0})*256+ord($s{1})-65536;
    if($asc>=-20319&&$asc<=-20284) return 'A';
    if($asc>=-20283&&$asc<=-19776) return 'B';
    if($asc>=-19775&&$asc<=-19219) return 'C';
    if($asc>=-19218&&$asc<=-18711) return 'D';
    if($asc>=-18710&&$asc<=-18527) return 'E';
    if($asc>=-18526&&$asc<=-18240) return 'F';
    if($asc>=-18239&&$asc<=-17923) return 'G';
    if($asc>=-17922&&$asc<=-17418) return 'H';
    if($asc>=-17417&&$asc<=-16475) return 'J';
    if($asc>=-16474&&$asc<=-16213) return 'K';
    if($asc>=-16212&&$asc<=-15641) return 'L';
    if($asc>=-15640&&$asc<=-15166) return 'M';
    if($asc>=-15165&&$asc<=-14923) return 'N';
    if($asc>=-14922&&$asc<=-14915) return 'O';
    if($asc>=-14914&&$asc<=-14631) return 'P';
    if($asc>=-14630&&$asc<=-14150) return 'Q';
    if($asc>=-14149&&$asc<=-14091) return 'R';
    if($asc>=-14090&&$asc<=-13319) return 'S';
    if($asc>=-13318&&$asc<=-12839) return 'T';
    if($asc>=-12838&&$asc<=-12557) return 'W';
    if($asc>=-12556&&$asc<=-11848) return 'X';
    if($asc>=-11847&&$asc<=-11056) return 'Y';
    if($asc>=-11055&&$asc<=-10247) return 'Z';
    return null;
}

/**
 * 保利威视频url生成
 * @param  [type] $str [description]
 * @return [type]      [description]
 */
function getVideoUrl_one($str){
    $c = substr($str, 0, 10);
    $d = substr($str, - 3, 1);
    $newstr = substr($str, 0, strlen($str) - 1);
    $video_url = 'http://mpv.videocc.net/' . $c . '/' . $d . '/' . $newstr . '2.mp4';
    return $video_url;
}


/**
 * 正则验证手机号码等
 */
function verifyStr($value,$type,$reg=''){
    switch ($type){
        case 'mobile':
            $reg = '/^1[3-9]{1}[0-9]{9}$/';
            break;
        default:
            break;
    }
    if (preg_match($reg,$value)){
        return true;
    }else{
        return false;
    }
}

/**
 * 根据生日计算年龄
 */
function howOld($birth) {
    list($birthYear, $birthMonth, $birthDay) = explode('-', $birth);
    list($currentYear, $currentMonth, $currentDay) = explode('-', date('Y-m-d'));
    $age = $currentYear - $birthYear - 1;
    if($currentMonth > $birthMonth || $currentMonth == $birthMonth && $currentDay >= $birthDay)
        $age++;
    return $age;
}

function getAgeByBirth($date1,$date2,$baseNumber=0){
    $datestart= date('Y-m-d',strtotime($date1));
    if(strtotime($datestart)>strtotime($date2)){
        $tmp=$date2;
        $date2=$datestart;
        $datestart=$tmp;
    }
    
    list($Y1,$m1,$d1)=explode('-',$datestart);
    list($Y2,$m2,$d2)=explode('-',$date2);
    $Y=$Y2-$Y1; // 1
    $m=$m2-$m1; // 0
    $d=$d2-$d1; // -11

    if($baseNumber != 0){
        $_Y = (int)$baseNumber;
        $_m = explode('.',$baseNumber);
        $_m = (count($_m) == 1)?0:(int)substr($_m[1],0,1);
        $_m = round(($_m*12)/10);
        $Y += $_Y;
        $m += $_m;
        if($d > 20){
            $m += 1;
        }
        $d = 0;
    }

    if($d<0){
        $d = $d + (int)date('t',strtotime("-1 month $date2"));
        $m = $m - 1;
    }
    if($m<0){
        $m = $m + 12;
        $Y = $Y - 1;
    }

    if($m>11){
        $m = $m - 12;
        $Y = $Y + 1;
    }
    
    if($Y == 0 && $m == 0 && $d != 0){
        return $d.'天';
    }elseif($Y == 0 && $m != 0 && $d != 0){
        return $m.'个月'.$d.'天';
    }elseif($Y != 0 && $m == 0 && $d != 0){
        return $Y.'岁'.$d.'天';
    }else{
        return $Y.'岁'.$m.'个月';
    }
    
}

/**
 * 二维数组根据某个字段去重
 * @param array $array  二维数组
 * @para array  去重后的数组
 */
function uniquArr($array,$item){
    $result = array();
    foreach($array as $k=>$val){
        $code = false;
        foreach($result as $_val){
            if($_val[$item] == $val[$item] && $val[$item] != 0){
                $code = true;
                break;
            }
        }
        if(!$code){
            $result[]=$val;
        }
    }
    return $result;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值