🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
这个是最经典的抽奖算法,很好用的哦 ```php <?php // 准备奖品池 // weight代表奖品权重 权重越大被抽到的可能性也就越大 // 可以在后台进行设置 // 如果不希望该奖品被抽到 权重可以给设置成0 $rewardOptions = array( array('id' => 1, 'name' => '橙武', 'weight' => 1), array('id' => 2, 'name' => '紫武', 'weight' => 5), array('id' => 3, 'name' => '蓝武', 'weight' => 1), array('id' => 4, 'name' => '绿武', 'weight' => 1), array('id' => 5, 'name' => '白武', 'weight' => 1), ); // 获取抽到的奖品ID $rewardId = getRewardId($rewardOptions); // 得到奖品ID 进行相关业务操作 // ..... // 展示对应的奖品 echo $rewardOptions[$rewardId - 1]['name']; //方法 getRewardId(奖品池, 随机数开始值(中奖权重的最小值)) function getRewardId($arr, $start = 1) { // 计算总权重 //array_column($arr, 'weight')获取数组中的weight组成新的数组 //array_sum计算数组和 $totalWeight = array_sum(array_column($arr, 'weight')); foreach($arr as $k => $v) { // 判断权重和随机数的对比得出,是否抽中,随机数的开始值建议也变成一个随机数相对公平 $random = mt_rand($start, $totalWeight); if($random <= $v['weight']) { return $v['id']; } else { $totalWeight -= $v['weight']; } } } ``` 抽奖的功能分析 活动管理(不同活动的管理) 活动奖品管理(奖品图片,权重,名称等的管理) 中奖记录管理(核实发放中奖,中奖记录) 用户管理 用户登录 用户抽奖