中奖码php,PHP抽奖代码 可定中奖概率

代码<?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();

}

}

$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'] ++;

print_r($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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值