PHP中奖概率算法-按概率值排序
说明:
- /*
- * 经典的概率算法,
- * $proArr是一个预先设置的数组,
- * 假设数组为:array(100,200,300,400),
- * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,
- * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,
- * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。
- * 这样 筛选到最终,总会有一个数满足要求。
- * 就相当于去一个箱子里摸东西,
- * 第一个不是,第二个不是,第三个还不是,那最后一个一定是。
- *
- */
header("Content-type: text/html; charset=utf-8"); $prize_arr = array( "0" => array("id"=>1,"prize"=>"平板电脑","v"=>1), "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"=>50), ); $actor = 100; foreach ($prize_arr as $v) { $arr[$v["id"]] = $v["v"]; } foreach ($arr as &$v) { $v = $v*$actor; } asort($arr); $sum = array_sum($arr); //总概率 $rand = mt_rand(1,$sum); $result = ""; //中奖产品id foreach ($arr as $k => $x) { if($rand <= $x) { $result = $k; break; } else { $rand -= $x; } } $res["yes"] = $prize_arr[$result-1]["prize"]; //中奖项 print_r($res);
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: Yii2-GridView常见操作
- 下一篇:没有了