0 && !isset($item["folder"])) { $item["folder"] = true; } $return[] = $item; } } return $return; } /** * tree 转一维数组 * @param $array * @return array */ function flatten_tree($array, $key = "children") { $result = []; foreach ($array as $item) { $result[] = $item; if (count($item[$key]) > 0) { $result = array_merge($result, flatten_tree($item[$key], $key)); } } return $result; } /** * 根据pid找寻所有的上层节点 * @param $array * @param $val * @param string $parent_key * @param array $result * @return array */ function get_pid($array, $val, $parent_key = "pid", $result = []) { $array = array_by_key($array, "id"); if (!isset($array[$val])) { return $result; } if ($array[$val][$parent_key] == 0 || !isset($array[$array[$val][$parent_key]])) { return $result; } else { $result[] = $array[$val][$parent_key]; return get_pid($array, $array[$val][$parent_key], $parent_key, $result); } } /** * 根据平行数组递归查找子节点 * @param $array * @param $key * @param $parent_key * @param $val * @param array $return * @return array */ function find_children($array, $key, $parent_key, $val, $return = []) { foreach ($array as $item) { if ($item[$parent_key] == $val) { $return[] = $item; $return = find_children($array, $key, $parent_key, $item[$key], $return); } } return $return; } /** * 18位身份证转年龄 * @param $IDnumber * @return bool|string */ function id_number2age($IDnumber) { $year = (int)substr($IDnumber, 6, 4); return date("Y") - $year; } /** * * @param $num * @param $lower * @return float|int|mixed|string */ function number2chinese($num, $lower = false) { $c1 = "零壹贰叁肆伍陆柒捌玖"; $c2 = "分角元拾佰仟万拾佰仟亿"; if ($lower) { $c1 = "零一二三四五六七八九"; $c2 = "分角元十佰仟万拾佰仟亿"; } $num = round($num, 2); $num = $num * 100; if (strlen($num) > 11) { return $num; } $i = 0; $c = ""; while (1) { if ($i == 0) { $n = substr($num, strlen($num) - 1, 1); } else { $n = $num % 10; } $p1 = substr($c1, 3 * $n, 3); $p2 = substr($c2, 3 * $i, 3); if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) { $c = $p1 . $p2 . $c; } else { $c = $p1 . $c; } $i = $i + 1; $num = $num / 10; $num = (int)$num; if ($num == 0) { break; } } $j = 0; $slen = strlen($c); while ($j < $slen) { $m = substr($c, $j, 6); if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') { $left = substr($c, 0, $j); $right = substr($c, $j + 3); $c = $left . $right; $j = $j - 3; $slen = $slen - 3; } $j = $j + 3; } if (substr($c, strlen($c) - 3, 3) == '零') { $c = substr($c, 0, strlen($c) - 3); } if (empty($c)) { return "零"; } else { return str_replace("元", "", $c); } } /** * 替换字符串中的部分字符串为星号 * @param null $string * @return string|null */ function string2secret($string = NULL) { if (!$string) { return NULL; } $length = mb_strlen($string); $visibleCount = (int)round($length / 4); $hiddenCount = $length - ($visibleCount * 2); return mb_substr($string, 0, $visibleCount) . str_repeat('*', $hiddenCount) . mb_substr($string, ($visibleCount * -1), $visibleCount); } /** * 友好的时间显示 * * @param int $sTime 待显示的时间 * @param string $type 类型. normal | mohu | full | ymd | other * @param string $alt 已失效 * @return string */ function friendly_date($sTime, $type = 'normal', $alt = 'false') { if (!$sTime) return ''; //sTime=源时间,cTime=当前时间,dTime=时间差 $sTime = strtotime($sTime); $cTime = time(); $dTime = $cTime - $sTime; $after_or_before = "前"; $dDay = intval(date("z", $cTime)) - intval(date("z", $sTime)); $dYear = intval(date("Y", $cTime)) - intval(date("Y", $sTime)); if ($sTime > $cTime) { $dTime = $sTime - $cTime; $after_or_before = "后"; $dDay = intval(date("z", $sTime)) - intval(date("z", $cTime)); $dYear = intval(date("Y", $sTime)) - intval(date("Y", $cTime)); } //normal:n秒前,n分钟前,n小时前,日期 if ($type == 'normal') { if ($dTime < 60) { if ($dTime < 10) { return '刚刚'; //by yangjs } else { return intval(floor($dTime / 10) * 10) . "秒{$after_or_before}"; } } elseif ($dTime < 3600) { return intval($dTime / 60) . "分钟{$after_or_before}"; //今天的数据.年份相同.日期相同. } elseif ($dYear == 0 && $dDay == 0) { //return intval($dTime/3600)."小时前"; return '今天' . date('H:i', $sTime); } elseif ($dYear == 0) { return date("m月d日 H:i", $sTime); } else { return date("Y-m-d H:i", $sTime); } } elseif ($type == 'mohu') { if ($dTime < 60) { return $dTime . "秒{$after_or_before}"; } elseif ($dTime < 3600) { return intval($dTime / 60) . "分钟{$after_or_before}"; } elseif ($dTime >= 3600 && $dDay == 0) { return intval($dTime / 3600) . "小时{$after_or_before}"; } elseif ($dDay > 0 && $dDay <= 7) { return intval($dDay) . "天{$after_or_before}"; } elseif ($dDay > 7 && $dDay <= 30) { return intval($dDay / 7) . "周{$after_or_before}"; } elseif ($dDay > 30) { return intval($dDay / 30) . "个月{$after_or_before}"; } //full: Y-m-d , H:i:s } elseif ($type == 'full') { return date("Y-m-d , H:i:s", $sTime); } elseif ($type == 'ymd') { return date("Y-m-d", $sTime); } else { if ($dTime < 60) { return $dTime . "秒{$after_or_before}"; } elseif ($dTime < 3600) { return intval($dTime / 60) . "分钟{$after_or_before}"; } elseif ($dTime >= 3600 && $dDay == 0) { return intval($dTime / 3600) . "小时{$after_or_before}"; } elseif ($dYear == 0) { return date("Y-m-d H:i:s", $sTime); } else { return date("Y-m-d H:i:s", $sTime); } } } /** * 多行文本转为radio选项 * @param $text * @param string $value * @param bool $block * @return string */ function multiline2radio($text, $value = "", $block = false) { $res = '
'; $text = explode("\r\n", $text); $block = $block === true ? "d-block" : ""; for ($i = 0; $i < count($text); $i++) { $checked = ""; if ($value === (string)$text[$i]) { $checked = "checked"; } if ((string)$text[$i] == "splitter") { $res .= "
"; } else { $res .= '
'; } } $res .= "
"; return $res; } function multiline2html($text) { $html = str_replace(["\r\n", "\r", "\n"], "
", $text); return $html; } /** * 小时格式字符转秒数 * @param $hour * @return mixed */ function hour2second($hour) { $hour = explode(":", $hour); $second = $hour[0] * 3600 + $hour[1] * 60 + $hour[2]; return $second; } /** * 秒数转小数格式 * @param $second * @return mixed */ function second2hour($second) { $hours = floor($second / 3600); $minutes = floor(($second - $hours * 3600) / 60); $seconds = floor($second - $hours * 3600 - $minutes * 60); return sprintf("%02s", $hours) . ":" . sprintf("%02s", $minutes) . ":" . sprintf("%02s", $seconds); } function curl($url, $post = array(), $arr_return = true) { $curl = curl_init(); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $post); $return_str = curl_exec($curl); curl_close($curl); if ($arr_return) { return json_decode($return_str, true); } else { return $return_str; } } function is_wechat() { return strpos($_SERVER["HTTP_USER_AGENT"], "MicroMessenger"); } function sms($to, $vars, $template_id, $belongs_type = null, $belongs_id = null) { $sms_app_id = env('SMS_APPID'); $sms_app_key = env('SMS_APPKEY'); is_array($vars) ? $vars = json_encode($vars) : ''; $data = "appid=" . $sms_app_id . "&signature=" . $sms_app_key . "&project=" . $template_id . "&vars=" . $vars . "&to=" . $to; $url = "https://api.submail.cn/message/xsend.json"; $return = curl($url, $data); $sms['mobile'] = $to; $sms['vars'] = $vars; $sms['template_id'] = $template_id; $sms['ip'] = request()->getClientIp(); $sms['status'] = $return['status']; $sms['belongs_type'] = $belongs_type; $sms['belongs_id'] = $belongs_id; if ($return['status'] != "success") { $sms['result_code'] = $return['code']; $sms['result_msg'] = $return['msg']; } $sms['created_at'] = date("Y-m-d H:i:s"); (new \App\Models\Sms())->insert($sms); return $return['status'] == "success"; } function get_http_type() { $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; return $http_type; } /** * 友好的时间显示 * * @param int $sTime 待显示的时间 * @param string $type 类型. normal | mohu | full | ymd | other * @param string $alt 已失效 * @return string */ function friendly_date2($sTime, $cTime = false, $type = 'mohu', $show_after_or_before = false) { if (!$sTime) return ''; //sTime=源时间,cTime=当前时间,dTime=时间差 $sTime = strtotime($sTime); $cTime ? $cTime = strtotime($cTime) : time(); $dTime = $cTime - $sTime; $after_or_before = "前"; $dDay = intval(date("z", $cTime)) - intval(date("z", $sTime)); $dYear = intval(date("Y", $cTime)) - intval(date("Y", $sTime)); if ($sTime > $cTime) { $dTime = $sTime - $cTime; $after_or_before = "后"; $dDay = intval(date("z", $sTime)) - intval(date("z", $cTime)); $dYear = intval(date("Y", $sTime)) - intval(date("Y", $cTime)); } $show_after_or_before ? "" : $after_or_before = ""; //normal:n秒前,n分钟前,n小时前,日期 if ($type == 'normal') { if ($dTime < 60) { if ($dTime < 10) { return '刚刚'; //by yangjs } else { return intval(floor($dTime / 10) * 10) . "秒{$after_or_before}"; } } elseif ($dTime < 3600) { return intval($dTime / 60) . "分钟{$after_or_before}"; //今天的数据.年份相同.日期相同. } elseif ($dYear == 0 && $dDay == 0) { //return intval($dTime/3600)."小时前"; return '今天' . date('H:i', $sTime); } elseif ($dYear == 0) { return date("m月d日 H:i", $sTime); } else { return date("Y-m-d H:i", $sTime); } } elseif ($type == 'mohu') { if ($dTime < 60) { return $dTime . "秒{$after_or_before}"; } elseif ($dTime < 3600) { return intval($dTime / 60) . "分钟{$after_or_before}"; } elseif ($dTime >= 3600 && $dDay == 0) { return intval($dTime / 3600) . "小时{$after_or_before}"; } elseif ($dDay > 0 && $dDay <= 7) { return intval($dDay) . "天{$after_or_before}"; } elseif ($dDay > 7 && $dDay <= 30) { return intval($dDay / 7) . "周{$after_or_before}"; } elseif ($dDay > 30) { return intval($dDay / 30) . "个月{$after_or_before}"; } //full: Y-m-d , H:i:s } elseif ($type == 'full') { return date("Y-m-d , H:i:s", $sTime); } elseif ($type == 'ymd') { return date("Y-m-d", $sTime); } else { if ($dTime < 60) { return $dTime . "秒{$after_or_before}"; } elseif ($dTime < 3600) { return intval($dTime / 60) . "分钟{$after_or_before}"; } elseif ($dTime >= 3600 && $dDay == 0) { return intval($dTime / 3600) . "小时{$after_or_before}"; } elseif ($dYear == 0) { return date("Y-m-d H:i:s", $sTime); } else { return date("Y-m-d H:i:s", $sTime); } } } // 获取当前域名 function getDomain(){ $domain = getHttp().'://'.$_SERVER['HTTP_HOST']; return $domain; } function getHttp(){ if (!isset($_SERVER['HTTPS'])) return 'http'; if ($_SERVER['HTTPS'] === 1){ return 'https'; } else if ($_SERVER['HTTPS'] === 'on') { return 'https'; } elseif ($_SERVER['SERVER_PORT'] == 443) { return 'https'; } return 'http'; } /** * 生成随机字符串 * @param int $num * @param false $numc * @return string */ function randStr($num = 6, $numc = false) { $str = '1234567890abcdefghijklmnopqrstuvwxyz'; $w = 35; if ($numc) { $str = '1234567890'; $w = 9; } $encrypt = ''; for ($i = 0; $i < $num; $i++) { $encrypt .= $str[mt_rand(0, $w)]; } return $encrypt; } /** * 获取指定日期段内的每一天日期 */ function getDateFromRange($start, $end) { $dt_start = strtotime($start); $dt_end = strtotime($end); $temp = []; while ($dt_start <= $dt_end) { $re = date('Y-m-d', $dt_start); $temp[] = $re; $dt_start = strtotime('+1 day', $dt_start); } return $temp; }