分享一个PHP抽奖算法

设置中奖的列表

  • 字段说明
  • id 奖品编号
  • prize 奖品名称
  • v 中奖概率
    $prize_arr = array(
    array(‘id‘ => 1, ‘prize‘ => ‘笔记本电脑‘, ‘v‘ => 1),
    array(‘id‘ => 2, ‘prize‘ => ‘华为手机‘, ‘v‘ => 5),
    array(‘id‘ => 3, ‘prize‘ => ‘蓝牙音箱‘, ‘v‘ => 10),
    array(‘id‘ => 4, ‘prize‘ => ‘1000积分‘, ‘v‘ => 12),
    array(‘id‘ => 5, ‘prize‘ => ‘30积分‘, ‘v‘ => 22),
    array(‘id‘ => 6, ‘prize‘ => ‘下次没准就能中哦‘, ‘v‘ => 50),
    );

封装中奖概率函数

function get_rand($proArr)
{
  $result = ‘‘;

  //概率数组的总概率精度
  $proSum = array_sum($proArr);

  //概率数组循环
  foreach($proArr as $key => $proCur)
  {
      // 获取随机数
    $randNum = mt_rand(1, $proSum);
    if($randNum <= $proCur)
    {
      $result = $key;
      break;
    }
    else
    {
          // 减掉当前中奖的概率
      $proSum -= $proCur;
    }
  }
  unset ($proArr);

  return $result;
}

获取中奖奖品

// 把奖品id 设置为键名
$prize_arr = array_combine(array_column($prize_arr, ‘id‘), $prize_arr);

foreach($prize_arr as $key => $val)
{
  $arr[$val[‘id‘]] = $val[‘v‘];
}

$rid = get_rand($arr); //根据概率获取奖项id

$res[‘yes‘] = $prize_arr[$rid][‘prize‘]; //中奖项
unset($prize_arr[$rid]); //将中奖项从数组中剔除,剩下未中奖项
shuffle($prize_arr); //打乱数组顺序
for($i = 0; $i < count($prize_arr); $i++)
{
  $pr[] = $prize_arr[$i][‘prize‘];
}
$res[‘no‘] = $pr;
echo json_encode($res);

原文地址:http://blog.51cto.com/5722921/2148939

时间: 2024-10-16 12:55:34

分享一个PHP抽奖算法的相关文章

分享一个PHP抽奖算法程序代码

抽奖算法需要满足的需求如下: 1.可以控制中奖的概率 2.具有随机性 3.最好可以控制奖品的数量 4.根据用户ID或者ip.手机号.QQ号等条件限制抽奖次数 初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序: 该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分: 代码如下 <?php /** * * * @lanfengye <[email protected]> */ class Chouji

分享一个转盘抽奖组件

转盘抽奖组件 1.支持分享到微信支持分享应用拿积分,积分抽奖,积分兑换奖品 其他功能: 1.按照自己的需求支持分享到多个平台:                2.支持截屏涂鸦功能:         3.积分功能: (1)用户分享获得积分: (2)邀请好友获得积分: 积分兑换活动,抽奖功能: (1)活动介绍: (2)用户可以分享应用拿积分: (3)拿到积分可以参与抽奖或者直接领取奖品,抽奖大转盘: <ignore_js_op> (4)领取奖品:   下载地址:http://youtui.oss-

【Java】分享一个使用DES加密和解密的算法

[Java]分享一个使用DES加密和解密的算法 分享一个使用DES加密和解密的算法,当前这个算法已经应用到项目中: package com.util; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.Key; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.c

中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的. * 这样 筛选到最终,总

[Unity3D入门]分享一个自制的入门级游戏项目&quot;坦克狙击手&quot;

[Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手" 我在学Unity3D,TankSniper(坦克狙击手)这个项目是用来练手的.游戏玩法来自这里(http://www.4399.com/flash/127672_3.htm),虽然抄袭了人家的创意,不过我只用来练习(目前还很不成熟,离人家的境界相差很大),坦克.导弹.建筑模型来自网络,应该不会有版权问题吧. 由于模型和代码总共10M以上了,需要源代码和发布的Windows版.网页版程序的同学麻烦点个赞并留下你的邮箱~ 到

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 <!--?

福利到~分享一个基于jquery的智能提示控件intellSeach.js

一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户使用.说白了,就是用户边输入,系统会提示相关的结果:或者,当用户点击搜索框时,就推荐一些内容,如360.百度都会提示今天的主要新闻或搜索量大的内容. jquery 已经有一个这样的插件了,叫 autocomplete, 但我觉得不好用.关于autocomplete的介绍也很多,有兴趣的朋友可以去试试

java版根据权重抽奖算法

根据权重进行抽取的算法应用比较广泛,其中抽奖便是主要用途之一.正好这几天也正在进行抽奖模块的开发,整个抽奖模块涉及到的地方大概有三处,分别是后台进行奖品的添加(同时设置权重和数量),前台根据后台配置生成抽奖队列并根据指令开始抽奖活动,最后一部分是后台统计中奖情况并设置物流状态.本文主要针对前台抽奖算法进行介绍如何根据权重设置每个奖品被抽到的概率. 抽奖算法的核心是根据权重设置随机数出现的概率,在此我将它封装成一个生成随机数的随机类,代码如下: /** * JAVA 返回随机数,并根据概率.比率

分享一个MySQL分库分表备份脚本(原)

分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上时间方便整理 2.取数据库:抓取数据库名称,我用的awk和grep配合取数据库的名称(如果想按照表备份可以再细化一下)注意要用mysql -e选项 这样才能做成脚本 3.系统环境变量:因为用到了函数,所以非系统内置的命令 最好在脚本里面用 . /etc/profile  把系统当前的环境变量传过来