php 抽奖概率 随机数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php $prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), '1' => array('id' => 2, 'title' => '联系笔记本', 'v' => 10), '2' => array('id' => 3, 'title' => '音箱设备', 'v' => 20), '3' => array('id' => 4, 'title' => '30GU盘', 'v' => 30), '4' => array('id' => 5, 'title' => '话费50元', 'v' => 10), '5' => array('id' => 6, 'title' => 'iphone6s', 'v' => 15), '6' => array('id' => 7, 'title' => '谢谢,继续加油哦!~', 'v' => 10), ); foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v']; } $prize_id = getRand($arr); //根据概率获取奖品id $data['msg'] = ($prize_id == 7) ? 0 : 1; //如果为0则没中 $data['prize_title'] = $prize_arr[$prize_id - 1]['title']; //中奖奖品 echo json_encode($data); exit; //以json数组返回给前端 function getRand($proArr) { //计算中奖概率 $rs = ''; //z中奖结果 $proSum = array_sum($proArr); //概率数组的总概率精度 //概率数组循环 foreach ($proArr as $key => $proCur) { $randNum = mt_rand(1, $proSum); if ($randNum <= $proCur) { $rs = $key; break; } else { $proSum -= $proCur; } } unset($proArr); return $rs; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<?php header("Content-Type: text/html; charset=utf-8"); $prize_arr = array( '0' => array( 'id' => 1, 'url' => 'http://mp.weixin.qq.com/s/hyPRO4tJAl1cJaY97TGFvw', 'v' => 5 ), '1' => array( 'id' => 2, 'url' => 'http://mp.weixin.qq.com/s/gD2MhdYAMx1PyA4jCdJtQQ', 'v' => 10 ), '2' => array( 'id' => 3, 'url' => 'http://mp.weixin.qq.com/s/Ud_F_l6ZufGElkZwONzGbA', 'v' => 20 ), '3' => array( 'id' => 4, 'url' => 'http://mp.weixin.qq.com/s/LA1lASoxuRdaZ13F8pQbNA', 'v' => 30 ), '4' => array( 'id' => 5, 'url' => 'http://mp.weixin.qq.com/s/efZKG9GjrchhBR4zT5zU3A', 'v' => 10 ), '5' => array( 'id' => 6, 'url' => 'http://mp.weixin.qq.com/s/ghisPsLG4OIFdehn6kZrUw', 'v' => 15 ), '6' => array( 'id' => 7, 'url' => 'http://mp.weixin.qq.com/s/bltFJBXstWN43r0GiePzBw', 'v' => 10 ), ); // echo "呵呵"; foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v']; } // var_dump($arr); $myid = myword($arr); $data['url'] = $prize_arr[$myid-1]['url']; $url = $data['url']; echo "<script type='text/javascript'>window.location.href='$url';</script>"; function myword($str){ $rs = '';//中奖结果 $proSum = array_sum($str);//计算数组中所有值的和 //概率数组循环 foreach ($str as $k => $v) { $word1 = mt_rand(1,$proSum); //生成更好的随机数 if( $word1 <= $v){ $rs = $k; break; }else{ $proSum -= $v; } } return $rs; } |