记录借载
核心算法
<?php
namespace app\Server;
class LuckDraw
{
public static function get_rand($arr){
$result = '';
$proSum = array_sum($arr);
foreach ($arr as $key => $proCur){ //1 5 10 12 22 50
$randNum = mt_rand(1,$proSum);
if ($randNum <= $proCur){
$result = $key;
break;
}else{
$proSum -= $proCur;
}
}
unset($arr);
return $result;
}
}
控制器调用
public function luckDraw(){
$prize = array(
array('id' => 1,'text' => '2022 ipad Pro','v' => 1),
array('id' => 2,'text' => 'iphone 12','v' => 5),
array('id' => 3,'text' => '华为p50','v' => 10),
array('id' => 4,'text' => '一加手机','v' => 12),
array('id' => 5,'text' => '小米14','v' => 22),
array('id' => 6,'text' => '很遗憾未中奖','v' => 50),
);
$prize = array_combine(array_column($prize,'id'),$prize);
foreach ($prize as $key => $val){
$arr[$val['id']] = $val['v'];
}
$rid = LuckDraw::get_rand($arr);
$res['yes'] = $prize[$rid]['text'];
unset($prize[$rid]);
shuffle($prize);
for ($i = 0; $i < count($prize);$i++){
$pr[] = $prize[$i]['text'];
}
$res['no'] = $pr;
dd($res);
}