where('pid',0)->field($field)->select(); foreach ($list as $k=>&$v){ $v['children']= Db::name('china_area')->where('pid',$v['id'])->field($field)->select(); } return $list; } //判断字段存在并不为空 function isset_full($arr, $key) { if (isset($arr[$key]) && !empty($arr[$key])) { return true; } else { return false; } } //判断字段存在并不为空 并且等于验证值 function isset_full_check($arr, $key,$check_val) { if (isset($arr[$key]) && !empty($arr[$key]) && $arr[$key] == $check_val) { return true; } else { return false; } } /**  * 把返回的数据集转换成Tree  * @param array $list 要转换的数据集  * @param string $pk 自增字段(栏目id)  * @param string $pid parent标记字段  * @return array  */ function make_tree($list,$pk='id',$pid='pid',$child='children',$root=0){ if(is_object($list)) $list = $list->toArray(); $tree=array(); $packData=array(); foreach ($list as $data) { $packData[$data[$pk]] = $data; } foreach ($packData as $key =>$val){ if($val[$pid]==$root){//代表跟节点 $tree[]=& $packData[$key]; }else{ $packData[$val[$pid]][$child][]=& $packData[$key]; //找到其父类 } } return $tree; } /** * 用于测试打印数组数据 **/ function p($arr) { header('content-type:text/html;charset=utf-8'); echo '
';
    print_r($arr);
    echo '
'; } /** * 返回JSON统一格式 * * @param int $code 返回状态 * @param string $msg 返回提示信息 * @param array $data 返回对象 * @return array */ function V($code, $msg, $data = array()) { return array('code' => $code, 'msg' => $msg, 'data' => $data); } /** * 格式化表格导入的时间为php时间 **/ function excel_time_conversion($data){ // excel软件中的日期是从 1900-01-01 开始计算的 //但是php 是从 1970-01-01开始计算的。 //这两者间有一个天数差 25569 $d = 25569; // excel和php之间相差的时间 $t = 24 * 60 * 60; // 一天24小时 return gmdate('Y-m-d', ($data - $d) *$t); } /** * @desc 时间生成 * @param $type 1、本日 2、本周 3、本月 4、本年 5、上个月 6、指定月份 * @return array */ function mk_time($type,$date){ switch($type){ case 1://本日 $start = mktime(0,0,0,date('m'), date('d'), date('Y')); $end = mktime(23,59,59,date('m'),date('d'),date('Y')); break; case 2://本周 $date_w = date('w'); if($date_w == 0) $date_w = 7; $start = mktime(0,0,0,date('m'),date('d')-$date_w+1,date('Y')); $end = mktime(23,59,59,date('m'),date('d')-$date_w+7,date('Y')); break; case 3://本月 $start = mktime(0,0,0,date('m'),1,date('Y')); $end = mktime(23,59,59,date('m'),date('t'),date('Y')); break; case 4://本年 $start = mktime(0,0,0,1,1,date('Y')); $end = mktime(0,0,0,12,31,date('Y')); break; case 5://上个月 $start = strtotime(date('Y-m-01 00:00:00',strtotime('-1 month'))); $end = strtotime(date("Y-m-d 23:59:59", strtotime(-date('d').'day'))); break; case 6://指定月份 $y = $date[0]; $m = $date[1]; $d = date('t', strtotime($y.'-'.$m)); $start = strtotime($y.'-'.$m); $end = mktime(23,59,59,$m,$d,$y); break; default: $t = mk_time(1,[]); $start = $t['start']; $end = $t['end']; break; } return array('start' => $start, 'end' => $end); } /** * 生成log文件 * @param $dir * @param $content */ function user_log($dir,$content){ $log_dir=dirname($_SERVER['DOCUMENT_ROOT']).'/runtime/'.$dir; if(!is_dir($log_dir)){ mkdir($log_dir,0777,true); } $filename=date('Y-m-d').'.log'; if(is_array($content)){ $content=json_encode($content,JSON_UNESCAPED_UNICODE); } file_put_contents($log_dir.'/'.$filename,date('Y-m-d H:i:s ').$content.PHP_EOL,FILE_APPEND); } /** * 获取订单号 **/ function get_order_sn($user_id) { $rand = $user_id < 9999 ? mt_rand(100000, 99999999) : mt_rand(100, 99999); $order_sn = date('Yhis') . $rand; $id = str_pad($user_id, (24 - strlen($order_sn)), '0', STR_PAD_BOTH); return $order_sn . $id; } /** * +---------------------------------------------------------- * 生成随机字符串 * +---------------------------------------------------------- * @param int $length 要生成的随机字符串长度 * @param string $type 随机码类型:0,数字+大小写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符 * +---------------------------------------------------------- * @return string * +---------------------------------------------------------- */ function randCode($length = 5, $type = 0) { $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|"); if ($type == 0) { array_pop($arr); $string = implode("", $arr); } elseif ($type == "-1") { $string = implode("", $arr); } else { $string = $arr[$type]; } $count = strlen($string) - 1; $code = ''; for ($i = 0; $i < $length; $i++) { $code .= $string[rand(0, $count)]; } return $code; } /** * 生成随机昵称/用户名 **/ function generate() { $tou = array('快乐', '冷静', '醉熏', '潇洒', '糊涂', '积极', '冷酷', '深情', '粗暴', '温柔', '可爱', '愉快', '义气', '认真', '威武', '帅气', '传统', '漂亮', '自然', '专一', '听话', '昏睡', '狂野', '等待', '搞怪', '幽默', '魁梧', '活泼', '开心', '高兴', '超帅', '留胡子', '坦率', '直率', '轻松', '痴情', '完美', '精明', '无聊', '有魅力', '丰富', '繁荣', '饱满', '炙热', '暴躁', '碧蓝', '俊逸', '英勇', '健忘', '故意', '无心', '土豪', '朴实', '兴奋', '幸福', '淡定', '不安', '阔达', '孤独', '独特', '疯狂', '时尚', '落后', '风趣', '忧伤', '大胆', '爱笑', '矮小', '健康', '合适', '玩命', '沉默', '斯文', '香蕉', '苹果', '鲤鱼', '鳗鱼', '任性', '细心', '粗心', '大意', '甜甜', '酷酷', '健壮', '英俊', '霸气', '阳光', '默默', '大力', '孝顺', '忧虑', '着急', '紧张', '善良', '凶狠', '害怕', '重要', '危机', '欢喜', '欣慰', '满意', '跳跃', '诚心', '称心', '如意', '怡然', '娇气', '无奈', '无语', '激动', '愤怒', '美好', '感动', '激情', '激昂', '震动', '虚拟', '超级', '寒冷', '精明', '明理', '犹豫', '忧郁', '寂寞', '奋斗', '勤奋', '现代', '过时', '稳重', '热情', '含蓄', '开放', '无辜', '多情', '纯真', '拉长', '热心', '从容', '体贴', '风中', '曾经', '追寻', '儒雅', '优雅', '开朗', '外向', '内向', '清爽', '文艺', '长情', '平常', '单身', '伶俐', '高大', '懦弱', '柔弱', '爱笑', '乐观', '耍酷', '酷炫', '神勇', '年轻', '唠叨', '瘦瘦', '无情', '包容', '顺心', '畅快', '舒适', '靓丽', '负责', '背后', '简单', '谦让', '彩色', '缥缈', '欢呼', '生动', '复杂', '慈祥', '仁爱', '魔幻', '虚幻', '淡然', '受伤', '雪白', '高高', '糟糕', '顺利', '闪闪', '羞涩', '缓慢', '迅速', '优秀', '聪明', '含糊', '俏皮', '淡淡', '坚强', '平淡', '欣喜', '能干', '灵巧', '友好', '机智', '机灵', '正直', '谨慎', '俭朴', '殷勤', '虚心', '辛勤', '自觉', '无私', '无限', '踏实', '老实', '现实', '可靠', '务实', '拼搏', '个性', '粗犷', '活力', '成就', '勤劳', '单纯', '落寞', '朴素', '悲凉', '忧心', '洁净', '清秀', '自由', '小巧', '单薄', '贪玩', '刻苦', '干净', '壮观', '和谐', '文静', '调皮', '害羞', '安详', '自信', '端庄', '坚定', '美满', '舒心', '温暖', '专注', '勤恳', '美丽', '腼腆', '优美', '甜美', '甜蜜', '整齐', '动人', '典雅', '尊敬', '舒服', '妩媚', '秀丽', '喜悦', '甜美', '彪壮', '强健', '大方', '俊秀', '聪慧', '迷人', '陶醉', '悦耳', '动听', '明亮', '结实', '魁梧', '标致', '清脆', '敏感', '光亮', '大气', '老迟到', '知性', '冷傲', '呆萌', '野性', '隐形', '笑点低', '微笑', '笨笨', '难过', '沉静', '火星上', '失眠', '安静', '纯情', '要减肥', '迷路', '烂漫', '哭泣', '贤惠', '苗条', '温婉', '发嗲', '会撒娇', '贪玩', '执着', '眯眯眼', '花痴', '想人陪', '眼睛大', '高贵', '傲娇', '心灵美', '爱撒娇', '细腻', '天真', '怕黑', '感性', '飘逸', '怕孤独', '忐忑', '高挑', '傻傻', '冷艳', '爱听歌', '还单身', '怕孤单', '懵懂', '迷你', '鲜艳', '飞快', '真实', '清新', '可耐'); $do = array("的", "爱", "", "与", "给", "扯", "和", "用", "方", "打", "就", "迎", "向", "踢", "笑", "闻", "有", "等于", "保卫", "演变"); $wei = array('嚓茶', '凉面', '便当', '毛豆', '花生', '可乐', '灯泡', '哈密瓜', '野狼', '背包', '眼神', '缘分', '雪碧', '人生', '牛排', '蚂蚁', '飞鸟', '灰狼', '斑马', '汉堡', '悟空', '巨人', '绿茶', '自行车', '保温杯', '大碗', '墨镜', '魔镜', '煎饼', '月饼', '月亮', '星星', '芝麻', '啤酒', '玫瑰', '大叔', '小伙', '哈密瓜,数据线', '太阳', '树叶', '芹菜', '黄蜂', '蜜粉', '蜜蜂', '信封', '西装', '外套', '裙子', '大象', '猫咪', '母鸡', '路灯', '蓝天', '白云', '星月', '彩虹', '微笑', '摩托', '板栗', '高山', '大地', '大树', '电灯胆', '砖头', '楼房', '水池', '鸡翅', '蜻蜓', '红牛', '咖啡', '机器猫', '枕头', '大船', '诺言', '钢笔', '刺猬', '天空', '飞机', '大炮', '冬天', '洋葱', '春天', '夏天', '秋天', '冬日', '航空', '毛衣', '豌豆', '黑米', '玉米', '眼睛', '老鼠', '白羊', '帅哥', '美女', '季节', '鲜花', '服饰', '裙子', '白开水', '秀发', '大山', '火车', '汽车', '歌曲', '舞蹈', '老师', '导师', '方盒', '大米', '麦片', '水杯', '水壶', '手套', '鞋子', '自行车', '鼠标', '手机', '电脑', '书本', '奇迹', '身影', '香烟', '夕阳', '台灯', '宝贝', '未来', '皮带', '钥匙', '心锁', '故事', '花瓣', '滑板', '画笔', '画板', '学姐', '店员', '电源', '饼干', '宝马', '过客', '大白', '时光', '石头', '钻石', '河马', '犀牛', '西牛', '绿草', '抽屉', '柜子', '往事', '寒风', '路人', '橘子', '耳机', '鸵鸟', '朋友', '苗条', '铅笔', '钢笔', '硬币', '热狗', '大侠', '御姐', '萝莉', '毛巾', '期待', '盼望', '白昼', '黑夜', '大门', '黑裤', '钢铁侠', '哑铃', '板凳', '枫叶', '荷花', '乌龟', '仙人掌', '衬衫', '大神', '草丛', '早晨', '心情', '茉莉', '流沙', '蜗牛', '战斗机', '冥王星', '猎豹', '棒球', '篮球', '乐曲', '电话', '网络', '世界', '中心', '鱼', '鸡', '狗', '老虎', '鸭子', '雨', '羽毛', '翅膀', '外套', '火', '丝袜', '书包', '钢笔', '冷风', '八宝粥', '烤鸡', '大雁', '音响', '招牌', '胡萝卜', '冰棍', '帽子', '菠萝', '蛋挞', '香水', '泥猴桃', '吐司', '溪流', '黄豆', '樱桃', '小鸽子', '小蝴蝶', '爆米花', '花卷', '小鸭子', '小海豚', '日记本', '小熊猫', '小懒猪', '小懒虫', '荔枝', '镜子', '曲奇', '金针菇', '小松鼠', '小虾米', '酒窝', '紫菜', '金鱼', '柚子', '果汁', '百褶裙', '项链', '帆布鞋', '火龙果', '奇异果', '煎蛋', '唇彩', '小土豆', '高跟鞋', '戒指', '雪糕', '睫毛', '铃铛', '手链', '香氛', '红酒', '月光', '酸奶', '银耳汤', '咖啡豆', '小蜜蜂', '小蚂蚁', '蜡烛', '棉花糖', '向日葵', '水蜜桃', '小蝴蝶', '小刺猬', '小丸子', '指甲油', '康乃馨', '糖豆', '薯片', '口红', '超短裙', '乌冬面', '冰淇淋', '棒棒糖', '长颈鹿', '豆芽', '发箍', '发卡', '发夹', '发带', '铃铛', '小馒头', '小笼包', '小甜瓜', '冬瓜', '香菇', '小兔子', '含羞草', '短靴', '睫毛膏', '小蘑菇', '跳跳糖', '小白菜', '草莓', '柠檬', '月饼', '百合', '纸鹤', '小天鹅', '云朵', '芒果', '面包', '海燕', '小猫咪', '龙猫', '唇膏', '鞋垫', '羊', '黑猫', '白猫', '万宝路', '金毛', '山水', '音响', '尊云', '西安'); $tou_num = rand(0, 331); $do_num = rand(0, 19); $wei_num = rand(0, 327); $type = rand(0, 1); if ($type == 0) { $username = $tou[$tou_num] . $do[$do_num] . $wei[$wei_num]; } else { $username = $wei[$wei_num] . $tou[$tou_num]; } return $username ? $username : ''; } /** * 生成汉字 **/ function getChar(){ $num = characters('12345',1); $b = ''; for ($i=0; $i<$num; $i++) { // 使用chr()函数拼接双字节汉字,前一个chr()为高位字节,后一个为低位字节 $a = chr(mt_rand(0xB0,0xD0)).chr(mt_rand(0xA1, 0xF0)); // 转码 $b .= iconv('GB2312', 'UTF-8', $a); } return $b; } /** * 随机数 * $data字符串 * $number 抽取的个数 */ function characters($data,$number){ $ran = str_shuffle($data); return substr($ran, 0, $number); } /** * 友好的时间展示 * @param int $time 时间戳 * @param string $format 默认显示格式化方式 * @return string 返回时间,错误时返回为空字符串 */ function diy_friend_date($time, $format='Y-m-d') { if (!$time) return ''; $nowtime = time(); if ($time > $nowtime){ return date($format, $time); } $Y = date('Y', $time);//年份 $z = date('z', $time);//当前的第几天 $nowY = date('Y', $nowtime); $nowz = date('z', $nowtime); if ($z > $nowz){ $nowz += 365; } $diffz = $nowz - $z;//获取差异天 $diffs = $nowtime - $time;//获取差异秒 if ($diffz >= 365){ return ($nowY-$Y).'年前'; } elseif ($diffz >= 30){ return floor($diffz / 30).'个月前'; } elseif ($diffz >= 7){ return floor($diffz / 7).'个星期前'; } elseif ($diffz >= 3){ return $diffz.'天前'; } elseif ($diffz >= 2){ return '前天'; } elseif ($diffz >= 1) { return '昨天'; } elseif ($diffs >= 3600) { return floor($diffs / 3600).'小时前'; } elseif ($diffs >= 300) { return floor($diffs / 60).'分钟前'; } else {//五分钟内 return '刚刚'.$diffs.'秒'; } } /** * 根据生日计算年龄 * @param integer $birthday : 用户生日 * @param integer $type * @return false|string */ function birthday_age($birthday, $type = 0) { if (!$birthday) { if ($type == 1) return '1'; return '1岁'; } $eighteen_years = 31536000 * 18; // 十八年秒数 if (time() - $birthday < $eighteen_years) { if ($type == 1) return '18'; return '18岁'; } // 判断如果首位是-的话, 就返回0 if (substr($birthday, 0, 1) == '-') { if ($type == 1) return '0'; return '0岁'; } $birthday = date("Y-m-d", $birthday); list($year, $month, $day) = explode("-", $birthday); $new_year = date("Y") - $year; $year_diff = $new_year > 0 ? $new_year : 0; $month_diff = date("m") - $month; $day_diff = date("d") - $day; if ($year_diff > 0 && ($day_diff < 0 || $month_diff < 0)) { $year_diff--; } if ($type == 1) return $year_diff; return $year_diff . "岁"; } /** * 根据计算年龄生日 * @param array $search * @return array */ function age_birthday($search) { $year = date('Y'); $month = date('m'); $day = date('d'); $max_birth = ''; $min_birth = ''; // 用户输入了最小年龄和最大年龄 if (isset($search['age_min']) && isset($search['age_max'])) { $min = min($search['age_min'], $search['age_max']); $max = max($search['age_min'], $search['age_max']); # 计算最大年龄的最早出生日期 $max_year = $year - $max - 1; $max_birth = date('Y-m-d', strtotime("+1 day", strtotime($max_year . '-' . $month . '-' . $day))); # 计算最小年龄的最后出生日期 $min_year = $year - $min; $min_birth = $min_year . '-' . $month . '-' . $day; } elseif (isset($search['age_min']) && !isset($search['age_max'])) { //用户只输入了最小年龄 # 计算最大年龄的最早出生日期 $max_year = $year - $search['age_min'] - 1; $max_birth = date('Y-m-d', strtotime("+1 day", strtotime($max_year . '-' . $month . '-' . $day))); # 计算最小年龄的最后出生日期 $min_year = $year - $search['age_min']; $min_birth = $min_year . '-' . $month . '-' . $day; } elseif (!isset($search['age_min']) && isset($search['age_max'])) { // 用户只输入了最大年龄 # 计算最大年龄的最早出生日期 $max_year = $year - $search['age_max'] - 1; $max_birth = date('Y-m-d', strtotime("+1 day", strtotime($max_year . '-' . $month . '-' . $day))); # 计算最小年龄的最后出生日期 $min_year = $year - $search['age_min']; $min_birth = $min_year . '-' . $month . '-' . $day; } return [ 'min' => $min_birth, 'max' => $max_birth, ]; } /** * 违禁词过滤 **/ function forbid_word($str_info) { $word = config('site.forbid_word'); if(!$word){ return true; } $result = 0; // $arr = @explode('|', $word); $arr = array_filter(explode('|', $word)); foreach ($arr as $key => $value) { if (strstr($str_info, $value)) { $result = 1; } } if ($result == 1) { return true; } return false; } /** * 一维数组转为二维数组 * * @param array $arr * @param string $str1 * @param string $str2 * @return array */ function get_one_two_array($arr, $str1, $str2) { $item = []; foreach ($arr as $k => $v) { $item[] = [ $str1 => $k, $str2 => $v, ]; } return $item; } /** * 填充零 **/ function filling_method($input,$number){ $pad_length = strlen((string)$number); if($pad_length == 1){ $pad_length = $pad_length+2; } if($pad_length == 2){ $pad_length = $pad_length+1; } $pad_string = "0"; return str_pad($input,$pad_length,$pad_string,STR_PAD_LEFT); } /** * 秒转换为天 * * @param integer $remain_time */ function get_stay_time($remain_time, $is_hour = 1, $is_minutes = 1) { if($remain_time >= 60){ $day = floor($remain_time / (3600*24)); $day = $day > 0 ? $day.'天' : ''; $hour = floor(($remain_time % (3600*24)) / 3600); $hour = $hour > 0 ? $hour.'小时' : ''; if($is_hour && $is_minutes) { $minutes = floor((($remain_time % (3600*24)) % 3600) / 60); $minutes = $minutes > 0 ? $minutes.'分钟' : ''; return $day.$hour.$minutes; } if($hour) { return $day.$hour; } return $day; } return $remain_time.'秒'; } /** * 事务开始 * * @return void */ function db_start() { Db::startTrans(); } /** * 事务提交 * * @return void */ function db_commit() { Db::commit(); } /** * 事务回滚 * * @return void */ function db_rollback() { Db::rollback(); } /** * 抛出响应异常(返回信息) * * @param string $msg 记录日志的错误信息, 如果returnMsg不配置, 则也为返回错误信息 * @param integer $type: 1.不记录日志只返回错误信息, 2.事务回退,记录日志并返回错误信息, 3.记录日志并返回错误信息 * @param Throwable|null $e 异常, 可为null * @param string $returnMsg 返回错误信息, 可不配置, 默认为msg * @param string $code 错误码 * @param array $headers 头部信息 * @param mixed $data 返回数据 */ function except($msg = '', $type = 1, $e = null, $returnMsg = '', $code = 0, array $header = [], $data = null) { $type == 1 && mexcept($msg, $code, $header, $data); $type == 2 && db_rollback(); // 返回信息 $returnMsg && $msg = $returnMsg; mexcept($msg, $code, $header, $data); } /** * 抛出异常(真正) * * @param string $msg * @param integer $code * @param array $headers * @param mixed $data * @return void */ function mexcept($msg = '', $code = 0, $headers = [], $data = null) { $time = (int)request()->server('REQUEST_TIME') ?: time(); abort(json(compact('code', 'msg', 'data', 'time'), null, $headers)); }