今天遇到这样的一个问题 封装一个 抽奖概率函数 思前想后去网上找点资料吧,而且不止一种方法 这种我感觉还是比较容易的 还是那句话 实现功能的思路不止一种 代码也不止一种。
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
|
function get_rand( $proArr ) { $result = '' ; //概率数组的总概率精度 $proSum = array_sum ( $proArr ); //概率数组循环 foreach ( $proArr as $key => $proCur ) { $randNum = mt_rand(1, $proSum ); if ( $randNum <= $proCur ) { $result = $key ; break ; } else { $proSum -= $proCur ; } } unset ( $proArr ); return $result ; } $prize_arr = array ( '0' => array ( 'id' =>1, 'prize' => '平板电脑' , 'v' =>0.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), ); foreach ( $prize_arr as $key => $val ) { $arr [ $val [ 'id' ]] = $val [ 'v' ]; } $rid = get_rand( $arr ); //根据概率获取奖项id $res [ 'yes' ] = $prize_arr [ $rid -1][ 'prize' ]; //中奖项 unset( $prize_arr [ $rid -1]); //将中奖项从数组中剔除,剩下未中奖项 shuffle( $prize_arr ); //打乱数组顺序 for ( $i =0; $i < count ( $prize_arr ); $i ++){ $pr [] = $prize_arr [ $i ][ 'prize' ]; } $res [ 'no' ] = $pr ; echo json_encode( $res ,JSON_UNESCAPED_UNICODE); |
以上这篇php简单中奖算法(实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/china90/archive/2017/08/14/7360325.html