php随机抽奖实例分析

本文实例讲述了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程序设计有所帮助。

以上是 php随机抽奖实例分析 的全部内容, 来源链接: utcz.com/z/321029.html

回到顶部