From 0f82bfe8be10839c6c3383c7f6e07454620ae431 Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq,com> Date: Wed, 13 Sep 2023 17:42:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common.php | 55 ++++++++++++++++++++++++++++-- app/controller/AdminZoneManage.php | 2 +- app/logic/Zone.php | 14 ++++---- 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/app/common.php b/app/common.php index 98e65e0..e0e079b 100644 --- a/app/common.php +++ b/app/common.php @@ -136,11 +136,62 @@ function format_phone_number($phoneNumber):string */ function rand_avatar() { - $avatarArr = config('custom.avatar') ?: []; - $rand = rand(0,count($avatarArr)); + $avatarArr = return_image_name('avatar') ?: config('custom.avatar'); + $rand = rand(0,count($avatarArr)-1); return $avatarArr[$rand] ?: ''; } +/** + * 获取目录下面的图片文件 + * @param string $path + * @return array + */ +function return_image_name(string $path = 'icon'):array +{ + $public_path = public_path(); + $imageDir = $public_path . '/storage/'.$path; + + $files = scandir($imageDir); // 获取目标文件夹下的文件名 + + // 过滤掉当前目录('.')和上级目录('..') + $files = array_diff($files, ['.', '..']); + $imageExtensions = ['jpg', 'jpeg', 'png', 'gif']; + foreach ($files as $key => $imageName) { + # 获取文件后缀 + $extension = pathinfo($imageName, PATHINFO_EXTENSION); + # 过滤不是图片的文件或目录 + if (!in_array(strtolower($extension),$imageExtensions)) { + unset($files[$key]); + continue; + } + # 组合路径 + $files[$key] = $path . '/' . $imageName; + } + # 排序覆盖数组索引 + sort($files); + return $files; +} + +/** + * 返回图片链接 + * @param string $path // 获取目录下面的图片文件 + * @param bool $is_http // true = 图片完整访问路径 + * @return string + */ +function rand_icon(string $path = 'icon',bool $is_http = false):string +{ + $files = return_image_name($path); + if (empty($files)) return ''; + $rand = rand(0,count($files)-1); + $imageUrl = $files[$rand] ?: ''; + if ($is_http) { + $domain = \think\facade\Request::instance()->domain(); + $url = config('filesystem.disks.public.url'); + return $domain . $url . '/' . $imageUrl; + } + return $imageUrl; +} + /** * 返回金额 * @param $number diff --git a/app/controller/AdminZoneManage.php b/app/controller/AdminZoneManage.php index dd7b888..6efff1a 100644 --- a/app/controller/AdminZoneManage.php +++ b/app/controller/AdminZoneManage.php @@ -143,7 +143,7 @@ class AdminZoneManage extends BaseController $ZoneGoodsParam->save([ 'zone_goods_id' => $zone_goods_id, 'amount' => $param['amount'], - 'image' => rand_avatar(), + 'image' => $param['amount'] > 0 ? rand_icon('awards_icon') : rand_icon(), 'probability' => $param['probability'] / 100, 'create_time' => date("Y-m-d H:i:s",time()) ]); diff --git a/app/logic/Zone.php b/app/logic/Zone.php index bc598b6..2ed11e0 100644 --- a/app/logic/Zone.php +++ b/app/logic/Zone.php @@ -184,9 +184,12 @@ class Zone /** * 获取刮刮乐信息(概率算法) - * @return array + * @param array $patterns // 数据 和 占比 + * @param int $direction // 纵向数量 + * @param int $transverse // 横向数量 + * @return array[] */ - public static function getWinningPrize($patterns) + public static function getWinningPrize(array $patterns,int $direction = 3,int $transverse = 4) { // $patterns = [ // ['image' => 'prize1.png', 'probability' => 0.3], // 奖项图案,概率为30% @@ -215,14 +218,11 @@ class Zone } unset($pattern); - $numberOfGroups = 3; // 要生成的图案组数 - $groupNum = 4; // 要生成的图案组数 - $data = []; $save_data = []; - for ($i = 0; $i < $numberOfGroups; $i++) { + for ($i = 0; $i < $direction; $i++) { - for ($j = 0; $j < $groupNum; $j++) { // 每组生成 3 个图案 + for ($j = 0; $j < $transverse; $j++) { // 每组生成 3 个图案 $selectedPattern = null; $randomNumber = mt_rand() / mt_getrandmax(); // 生成 0 到 1 之间的随机数