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=RUNTIME_PATH.'/'.$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 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; } /** * 秒转换为天 * * @param integer $remain_time */ function get_stay_time($remain_time, $is_hour = 1, $is_minutes = 1) { $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; } /** * +---------------------------------------------------------- * 生成随机字符串 * +---------------------------------------------------------- * @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; } /** * 事务开始 * * @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)); }