您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

抽奖函数升级版

2024/4/17 22:27:28发布24次查看
可自定义概率,按需求排除奖项 无 ?php/** * 抽奖函数升级版,可排除若干奖项 */class lottery { static public $rate; static public $ignore; /** * * @param type $rate 概率设置 * @param type $ignore 忽略的奖项 * @return 调用实例化后的对象方法 * @e
可自定义概率,按需求排除奖项 lotteryprocess(); } /** * 处理抽奖 * @return type */ public function lotteryprocess() { $ratesum = array_sum(self::$rate); //概率之和 //考虑用户输入的概率之和不等于100 if ($ratesum 100) { die('the rate sum over 100%!'); } //处理忽略奖项 $ratecount = count(self::$rate); foreach (self::$rate as $key => $value) { if (in_array($key, self::$ignore)) { self::$rate[$ratecount - 1]+=self::$rate[$key]; self::$rate[$key] = 0; } $seedraw[$key] = self::$rate[$key] * 100; //概率放大100被备用 } $seed = $this->arraysum($seedraw); //处理数组 $randval = mt_rand(0, 10000); return $this->judge($seed, $randval); } /** * 从0-10000重新组织数组,每个值为之前各项的累加 * @param array $seedraw * @return array */ private function arraysum(array$seedraw) { foreach ($seedraw as $key => $value) { $tmpsum = 0; for ($i = 0; $i < $key; $i++) { $tmpsum+=$seedraw[$i]; } $seed[$key] = $tmpsum; } array_push($seed, 10000); return $seed; } /** * 根据随机值判断此次中了第几个奖项 * @param type $seed * @param type $rand * @return int */ private function judge($seed, $rand) { array_push($seed, null); //凑数 for ($i = 0; $i = $seed[$i] && $rand < $seed[$i + 1]) { return $i; } } }}ini_set('display_errors', 'on');$l0 = 0;$l1 = 0;$l2 = 0;$l3 = 0;$l4 = 0;$l5 = 0;for ($i = 0; $i <= 10000; $i++) { $result = lottery::runonce(array(20, 10, 10, 10), array(0, 1)); if ($result === 0) $l0++; if ($result == 1) $l1++; if ($result == 2) $l2++; if ($result == 3) $l3++; if ($result == 4) $l4++;}echo '0:' . $l0 . '
1:' . $l1 . '
2:' . $l2 . '
3:' . $l3 . '
4:' . $l4;
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product