文档章节

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

bengozhong
 bengozhong
发布于 2015/08/21 09:55
字数 663
阅读 66
收藏 9
点赞 0
评论 0
    <?php  
    /*
     * 经典的概率算法,
     * $proArr是一个预先设置的数组,
     * 假设数组为:array(100,200,300,400),
     * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,  
     * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,
     * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。
     * 这样 筛选到最终,总会有一个数满足要求。
     * 就相当于去一个箱子里摸东西,
     * 第一个不是,第二个不是,第三个还不是,那最后一个一定是。
     * 这个算法简单,而且效率非常 高,
     * 关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。
     */  
    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表示奖品,v表示中奖概率。
     * 注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,
     * 数组中v的总和(基数),基数越大越能体现概率的准确性。
     * 本例中v的总和为100,那么平板电脑对应的 中奖概率就是1%,
     * 如果v的总和是10000,那中奖概率就是万分之一了。
     *  
     */  
    $prize_arr = array(   
        '0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),   
        '1' => array('id'=>2,'prize'=>'数码相机','v'=>5),   
        '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),   
        '3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),   
        '4' => array('id'=>5,'prize'=>'10Q币','v'=>22),   
        '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),   
    );   
      
    /*
     * 每次前端页面的请求,PHP循环奖项设置数组,
     * 通过概率计算函数get_rand获取抽中的奖项id。
     * 将中奖奖品保存在数组$res['yes']中,
     * 而剩下的未中奖的信息保存在$res['no']中,
     * 最后输出json个数数据给前端页面。
     */  
    foreach ($prize_arr as $key => $val) {   
        $arr[$val['id']] = $val['v'];   
    }   
    $rid = get_rand($arr); //根据概率获取奖项id   
      
    $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项   
    unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项   
    shuffle($prize_arr); //打乱数组顺序   
    for($i=0;$i<count($prize_arr);$i++){   
        $pr[] = $prize_arr[$i]['prize'];   
    }   
    $res['no'] = $pr;   
    print_r($res);   
    ?> 

© 著作权归作者所有

共有 人打赏支持
bengozhong
粉丝 16
博文 414
码字总数 425526
作品 0
深圳
程序员
幸运大转盘-jQuery+PHP实现的抽奖程序

目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的...

蜗牛奔跑 ⋅ 2015/07/06 ⋅ 0

php 抽奖概率算法 转盘

<?php / 经典的概率算法, $proArr是一个预先设置的数组, 假设数组为:array(100,200,300,400), 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将...

bengozhong ⋅ 2015/07/27 ⋅ 0

php几个常用的概率算法(抽奖、广告首选)

做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度。同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad、iphon...

蜗牛奔跑 ⋅ 2015/07/22 ⋅ 0

透笔度/wx-jq

wx-jq (一套完全原创的微信小程序插件集合库) 微信小程序插件,微信小程序组件,微信小程序插件集合,微信小程序组件集合,微信小程序插件学习,微信小程序插件开发, 查看效果截图: http...

透笔度 ⋅ 01/26 ⋅ 0

Peason/jcbase-wx-song

微信项目部分截图: 大转盘抽奖项目 实现功能需求: 1、微信公众号里面增加一个抽奖及查看奖品的入口菜单。 2、奖品都是优惠券,有使用时间限制。 3、中奖概率100%。 4、可单独设置每个奖项的...

Peason ⋅ 2016/10/26 ⋅ 0

请教一下刮刮卡中奖概率问题

php程序 :比如我预计参与人数是1000人,共有20个有奖,中奖是随机的,我的思路是弄一个数组1000个长度的数组$arr,980个0,表示未中奖,20个1表示中奖,我用shuffle 把数组打乱,然后在1-1000之间随...

hphper ⋅ 2015/07/11 ⋅ 11

wx-jq:一套完全原创的微信小程序插件集合库

wx-jq (一套完全原创的微信小程序插件集合库) 微信小程序插件,微信小程序组件,微信小程序插件集合,微信小程序组件集合,微信小程序插件学习,微信小程序插件开发, 在线演示: 下载地址...

透笔度 ⋅ 01/25 ⋅ 2

java转盘抽奖,可以改中奖概率,中奖物品的

java写个转盘抽奖的,可以改中奖概率,中奖物品的,该怎么弄啊,拜谢

xiaoyilong20 ⋅ 2013/11/06 ⋅ 3

php+jquery实现转盘抽奖 概率可任意调

php+jquery实现转盘抽奖 概率可任意调 php+jquery实现转盘抽奖 概率可任意调 Posted by: xiaomiao 2014/05/13in Code, PHP 3 Comments php+jquery实现转盘抽奖 查看DEMO演示 转盘抽奖,炫丽的...

蜗牛奔跑 ⋅ 2015/07/22 ⋅ 0

js幸运大转盘开发

最终效果实例下载:http://www.oschina.net/code/snippet235264454997 一.大转盘准备工作 网上的一个抽奖大转盘实例http://www.jq22.com/yanshi2252 这就是我们要开发的效果,不过我们是让指...

透笔度 ⋅ 2016/03/28 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 53分钟前 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 今天 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部