<?php
// 准备奖品
// weight代表奖品权重 权重越大被抽到的可能性也就越大
// 可以在后台进行设置
// 如果不希望该奖品被抽到 权重可以给设置成0
$rewardOptions = array(
array('id' => 1, 'name' => '橙武', 'weight' => 1),
array('id' => 2, 'name' => '紫武', 'weight' => 1),
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 抽奖方法(必定能抽中奖品)]
* 这个算法的核心点就在于看获得的随机数是否落在某个权重范围区间
* 如果是则直接可以取出该奖品
* 如果不是则将总权重中去除本次循环的权重
* 总权重一次一次减小 最后一个总权重 必定等于最后一次循环的奖品权重
* 所以获得的随机数必定也在这个范围内 奖品必然会获得
* @param [type] $arr [奖品数组]
* @param [type] $start [起始权重 可用来做猫腻
* 如果只想让廉价的奖品被抽中 可以将该值设置为廉价商品的权重值]
* @return [type] $id [抽到的奖品]
*/
function getRewardId($arr, $start = 1) {
// 计算总权重
$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'];
}
}
}
看完你就会的php抽奖小案例 还在等什么?
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 小米推送:https://dev.mi.com/doc/p=6421/ 华为推送:http://developer...