抽奖优化

Run Settings
LanguagePHP
Language Version
Run Command
<?php class runtime { private $StartTime = 0; private $StopTime = 0; public function __construct(){ $this->StartTime = $this->get_microtime(); } private function get_microtime() { return microtime(true); } public function end() { $this->StopTime = $this->get_microtime(); return round(($this->StopTime - $this->StartTime) * 1000, 1); } } function randFloat($min=0, $max=1){ return round($min + mt_rand()/mt_getrandmax() * ($max-$min),2); } function randjp($prize_arr) { //算出一共有多少中奖率 $randNum = array_sum(array_column($prize_arr,'v')); //已经累计多少中奖率 $z_lv = 0; array_multisort($prize_arr); foreach ($prize_arr as $item) { $j_lv = round($item['v'] / $randNum,2); if($j_lv > 0) { //算出每个奖品的概率 $lv[$item['id']] = $z_lv.':'.$j_lv; $z_lv = $j_lv; } } //得到随机的中奖率 $fw = explode(':',end($lv)); $jp_zjl = randFloat(0,$fw[1]); foreach ($lv as $k => $v) { $jp_lv = explode(':',$v); if($jp_zjl >= (float)$jp_lv[0] && $jp_zjl <= (float)$jp_lv[1]) { return $k - 1; break; } } } $runtime = new runtime(); $prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=>0), '1' => array('id'=>2,'prize'=>'数码相机','v'=>5), '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10), '3' => array('id'=>4,'prize'=>'4G优盘','v'=>12), '4' => array('id'=>5,'prize'=>'10Q币','v'=>22), '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>51), ); $num = 1; for ($i=1; $i<= $num; $i++){ var_dump($prize_arr[randjp($prize_arr)]); } echo "一共执行时间: ".$runtime->end()." 毫秒";
Editor Settings
Theme
Key bindings
Full width
Lines