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程序设计有所帮助。