[TOC] #### 生成指定长度的随机英文数字字符串 --- ```php /** * 生成指定长度的随机英文数字字符串 * @param int $length 字符串长度 * @return string 成的随机字符串 */ function getRandString($length) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } ``` #### 生成24位随机订单号, 年月日时分秒(14位) + 10位随机数 --- ```php /** * 生成24位随机订单号 * 年月日时分秒(14位) + 10位随机数 */ function ordersn() { return date('YmdHis') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8) . mt_rand(10, 99); } /** * 随机生成18位数字订单号(18位:不包含前缀) * @param string $prefix 订单号前缀 * @return string 随机订单号 */ function generateOrdersn(string $prefix = '') { return $prefix . date('YmdHis') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 2) . mt_rand(10, 99); } ``` #### 根据时间戳出计算到现在的文字时间 --- ```php /** * 将时间戳转为文字时间 * @param integer $time */ function wordTime(int $time) { $str = ''; $time = intval(substr($time, 0, 10)); $int = time() - $time; if ($int < 5){ $str = sprintf('刚刚', $int); } elseif ($int < 60){ $str = sprintf('%d秒前', $int); } elseif ($int < 3600) { $str = sprintf('%d分钟前', floor($int / 60)); } elseif ($int < 86400){ $str = sprintf('%d小时前', floor($int / 3600)); } elseif ($int < 2592000) { $str = sprintf('%d天前', floor($int / 86400)); } else { $str = date('Y-m-d H:i:s', $time); } return $str; } ``` #### 格式化数字(将一个整数进行单位转换: 万、亿) --- ```php /** * 整数格式化, 单位转换 * @param integer $num */ function formatNumber(int $num) { $num = intval($num); $length = strlen($num); if ( $length > 8 ) { $decimal = rtrim(substr($num, -8, 2), '0'); $decimal = $decimal ? '.' . $decimal : ''; // 亿 return substr($num, 0, strrpos($num, substr($num, -7)) - 1) . $decimal . '亿'; } elseif ( $length > 4 ) { $decimal = rtrim(substr($num, -4, 2), '0'); $decimal = $decimal ? '.' . $decimal : ''; // 万 return substr($num, 0, strrpos($num, substr($num, -3)) - 1) . $decimal . 'W'; } else { // 千 return $num; } } ``` #### 给文件生成新的随机文件名 --- ``` /** * 给文件生成新的随机文件名 */ function getRandName($file) { return md5(microtime(true) . mt_rand(1, 1e9)) . '.' . pathinfo($file, PATHINFO_EXTENSION); } ``` #### 富文本中的图片拼接上域名 --- ```php /** * 富文本中的图片拼接上域名 * @param string $content */ function matchImg(string $content) { preg_match_all('/<img(.*?)src=\"(.*?)\"(.*?)>/is', $content, $matches); if (!empty($matches[2])) { foreach ($matches[2] as $value) { // request()->domain() 获取当前域名 // 这种获取当前域名的写法是TP6中的写法 if (mb_substr($value, 0, 4) !== 'http') { $content = str_replace($value, request()->domain() . $value, $content); } } } return $content; } ``` #### 获取请求头信息【TP6.1】 --- 下面的函数是用于获取请求头中的所有数据 ThinkPHP6.1.0 源码文件:`vendor\topthink\framework\src\think\Request.php` 中的 `__make()` 方法 ```php /** * 获取请求头信息 */ function getHeaders() { if (function_exists('apache_request_headers') && $result = apache_request_headers()) { $header = $result; } else { $header = []; $server = $_SERVER; foreach ($server as $key => $val) { if (0 === strpos($key, 'HTTP_')) { $key = str_replace('_', '-', strtolower(substr($key, 5))); $header[$key] = $val; } } if (isset($server['CONTENT_TYPE'])) { $header['content-type'] = $server['CONTENT_TYPE']; } if (isset($server['CONTENT_LENGTH'])) { $header['content-length'] = $server['CONTENT_LENGTH']; } } return $header; } ```