源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 35|回复: 20

[PHP编程] php随机抽奖实例分析

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2015-3-4 11:40:05 | 显示全部楼层 |阅读模式
这篇文章主要介绍了php随机抽奖实现方法,实例分析了php抽奖类lottery_tool及其具体使用技巧,需要的朋友可以参考下

本文实例讲述了php随机抽奖用法。分享给大家供大家参考。具体分析如下:

1. 按照设定的概率,得到随机抽奖的结果。    
复制代码 代码如下:<?php
/**
 * 抽奖工具
 */
class lottery_tool {
    protected static $awardsArr;
    protected static $proField = 'probability';
    protected static $proSum = 0;
    protected static $checkAward = false;
    const SUCCESS_CODE = 0;
    const FAIL_CODE = -1;
    //检查抽奖数据
    protected static function checkAwards(){
        if (!is_array(self::$awardsArr) || empty(self::$awardsArr)) {
            return self::$checkAward = false;
        }
        self::$proSum = 0;
        foreach (self::$awardsArr as $_key => $award) {
            self::$proSum += $award[self::$proField];
        }
        if (empty(self::$proSum)) {
            return self::$checkAward = false;
        }
        return self::$checkAward = true;
    }
    protected static function successRoll($rollKey){
        return array('code' => self::SUCCESS_CODE, 'roll_key' => $rollKey, 'msg' => 'roll success');
    }
    protected static function failRoll($msg = 'roll fail'){
        return array('code' => self::FAIL_CODE, 'msg' => $msg );
    }
    //抽奖
    public static function roll () {
        if (false == self::$checkAward) {
            return self::failRoll('awards data is not the right format!');
        }
        $result = mt_rand(0, self::$proSum);
        $proValue = 0;
        foreach (self::$awardsArr as $_key => $value) {
            $proValue += $value[self::$proField];
            if ($result <= $proValue) {
                return self::successRoll($_key);
            }
        }
        return self::failRoll('wrong');
    }
    //改变概率字段名
    public static function setProField($field = null) {
        if (!empty($field)) {
            self::$proField = $field;
        }
    }
    //设置奖品
    public static function setAwards($awards){
        self::$awardsArr = $awards;
        self::checkAwards();
    }
}
2. 示例代码:
复制代码 代码如下:$awards = array(
    '0' => array('pro' => 15, 'info' => '15%的可能性'),
    '1' => array('pro' => 25, 'info' => '25%的可能性'),
    '2' => array('pro' => 40, 'info' => '40%的可能性'),
    '3' => array('pro' => 20, 'info' => '20%的可能性'),
    );
lottery_tool::setProField('pro');
lottery_tool::setAwards($awards);
$result = array();
for ($i = 10000; $i --;) {
    $result[] = lottery_tool::roll();
}
foreach ($result as $key => $value) {
    $awards[$value['roll_key']]['num'] ++;
}
echo '<pre>';
var_dump($awards);

运行结果如下:
复制代码 代码如下:array
  0 =>
    array
      'pro' => int 15
      'info' => string '15%的可能性' (length=15)
      'num' => int 1596
  1 =>
    array
      'pro' => int 25
      'info' => string '25%的可能性' (length=15)
      'num' => int 2484
  2 =>
    array
      'pro' => int 40
      'info' => string '40%的可能性' (length=15)
      'num' => int 3939
  3 =>
    array
      'pro' => int 20
      'info' => string '20%的可能性' (length=15)
      'num' => int 1981

希望本文所述对大家的php程序设计有所帮助。

回复

使用道具 举报

2

主题

2万

回帖

473

积分

中级会员

Rank: 3Rank: 3

积分
473
发表于 2023-5-30 10:24:05 | 显示全部楼层
呵呵呵呵呵呵呵a
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

66

积分

注册会员

Rank: 2

积分
66
发表于 2023-9-6 15:13:38 | 显示全部楼层
需要很久了终于找到了
回复 支持 反对

使用道具 举报

5

主题

2万

回帖

183

积分

注册会员

Rank: 2

积分
183
发表于 2023-10-30 20:54:15 | 显示全部楼层
儿飞飞微风DVD谁vdsvd
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-12-10 20:38:29 | 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

29

主题

2万

回帖

194

积分

注册会员

Rank: 2

积分
194
发表于 2024-5-3 16:27:50 | 显示全部楼层
管灌灌灌灌灌灌灌灌灌灌
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-6-13 05:16:33 | 显示全部楼层
而非为吾问无为谓娃娃
回复 支持 反对

使用道具 举报

120

主题

188

回帖

668

积分

高级会员

Rank: 4

积分
668
发表于 2024-6-22 18:18:28 | 显示全部楼层
这个源码还可以
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

247

积分

中级会员

Rank: 3Rank: 3

积分
247
发表于 2024-7-27 16:08:08 | 显示全部楼层
的沙发水电费水电费
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

321

积分

中级会员

Rank: 3Rank: 3

积分
321
发表于 2024-9-14 00:58:52 | 显示全部楼层
我要金豆金豆金豆
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-25 13:28 , Processed in 0.169024 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表