Quick actions

cmd+k|ctrl+k

Navigation

Languages

抽奖优化

Snippet info

Language

Php

Visibility

public

Author

libaowei924

Created

2020-06-05T09:20:31Z

Updated

2020-06-05T09:21:15Z

<?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()." 毫秒";
INFO