您的位置:首页 > 编程语言 > PHP开发

php 发奖

2017-12-20 12:32 267 查看
session_start();
// unset($_SESSION['reward']);die;//清已领取过的奖励
//保存已领取过的奖励
function rewarded($id = 0)
{
$reward = isset($_SESSION['reward']) ? $_SESSION['reward'] : array();
if ($id !== 0) {
array_push($reward, $id);
$_SESSION['reward'] = $reward;
}
return $reward;
}
// 奖品概率
function configPro()
{
$configPro = array(
1 => array('pro'=>0.05),
2 => array('pro'=>0.2),
3 => array('pro'=>0.3),
4 => array('pro'=>0.4),
5 => array('pro'=>0.05),
);
$num = 100;//总的权重,保证每个奖励能是整数
$total = 0;//实际总权重
$rewarded = rewarded();//已经领取过的奖励
// 计算每个奖品的取值区间以及实际总权重
foreach ($configPro as $key => &$val) {
//排除掉已经发过的奖励(如果可以重复抽,注释掉此判断即可)
if (in_array($key, $rewarded)) {
unset($configPro[$key]);
continue;
}
$val['min'] = $total+1;
$weights = $num*$val['pro'];
$total += $weights;
$val['max'] = $total;
}
return array('total'=>$total, 'config'=> $configPro);
}

function giveReward()
{
$data = configPro();
if ($data['total'] == 0) {
echo '已领完';die;
}
$rand = mt_rand(1, $data['total']);
$id = 0;
foreach ($data['config'] as $key => &$val) {
if ($rand >= $val['min'] && $rand <= $val['max']) {
$id = $key;
rewarded($key);
break;
}
}
return $id;
}
var_dump('已领取奖励:',json_encode(rewarded()));
echo '<br/>';
$res = giveReward();
var_dump('当前领取奖励:', $res);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: