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