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);
相关文章推荐
- 用PHP实现登陆验证码(类似条行码状)
- php格式化金钱函数
- 关于PHP模板Smarty的初级使用方法以及心得分享
- php网上参考技术
- PHP在linux上执行外部命令(整理)
- php实验一
- PHP的设计模式(常见的五种设计模式)
- PHP中global与$GLOBALS['']的区别
- 美丽说急招支付java,高工,架构,php高工和架构,广告架构
- ubunutu 源码lamp mysql5.5 PHP5.4 +swsc中文分词
- PHPExcel 进行Excel读取
- Ubuntu16.04 php7.0+mysql5.7+apache2环境搭配
- php限制文件下载速度的代码
- 浅析PHP水印技术
- php 抽奖类的
- 百度OCR文字识别PHP的Demo
- php中iconv函数使用方法
- PHP防SQL注入的方法
- Windows下搭建Apache, PHP, MySQL (试了一下, 靠谱, 写得非常清晰, 赞一个!)
- PHP下ereg实现匹配ip的正则