入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PHP中奖概率算法-按概率值排序

创建时间:2017-05-09 投稿人: 浏览次数:755

说明:

  1. /* 
  2.  * 经典的概率算法, 
  3.  * $proArr是一个预先设置的数组, 
  4.  * 假设数组为:array(100,200,300,400), 
  5.  * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,  
  6.  * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, 
  7.  * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。 
  8.  * 这样 筛选到最终,总会有一个数满足要求。 
  9.  * 就相当于去一个箱子里摸东西, 
  10.  * 第一个不是,第二个不是,第三个还不是,那最后一个一定是。 
  11.  *
  12.  */ 

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。