《PHP編程:php隨機抽獎實例分析》要點:
本文介紹了PHP編程:php隨機抽獎實例分析,希望對您有用。如果有疑問,可以聯系我們。
本文實例講述了php隨機抽獎用法.分享給大家供大家參考.具體分析如下:PHP實戰
1. 依照設定的概率,得到隨機抽獎的結果.????
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();
??? }
}
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);
運行結果如下:
PHP實戰
代碼如下:
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實戰
《PHP編程:php隨機抽獎實例分析》是否對您有啟發,歡迎查看更多與《PHP編程:php隨機抽獎實例分析》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/11889.html