先定义一个公共方法获取随机值
<?php
function getRand($proArr)
{
print_r($proArr);
$result = '';
$proSum = array_sum($proArr);
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
控制器执行
<?php
declare (strict_types = 1);
namespace app\admin\controller;
use app\common\controller\SnowFlake;
use think\cache\driver\Redis;
class Index
{
public function index()
{
$redis = new Redis();
$prizeArr = [
['prize' => '一等奖', 'v' => 1],
['prize' => '二等奖', 'v' => 5],
['prize' => '三等奖', 'v' => 10],
['prize' => '四等奖', 'v' => 12],
['prize' => '五等奖', 'v' => 22],
['prize' => '未中奖', 'v' => 50],
];
$arr = [];
foreach ($prizeArr as $k => $v){
$autoID=$redis->exists('choujiang_'.$k);
if (!$autoID) {
$redis->hMSet('choujiang_'.$k, $v);
}else{
$val = $redis->hMGet('choujiang_'.$k, ['v']);
if($val['v']){
$arr[$k] = $val['v'];
}
}
}
$rid = getRand($arr);
$val = $redis->hMGet('choujiang_'.$rid, ['v']);
$redis->hMSet('choujiang_'.$rid, ['v'=>$val['v']-1]);
echo $prizeArr[$rid]['prize'];
}
}
|