多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
``` <?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']; } } } ```