今天遇到这样的一个问题 封装一个 抽奖概率函数 思前想后去网上找点资料吧,而且不止一种方法 这种我感觉还是比较容易的 还是那句话 实现功能的思路不止一种 代码也不止一种。
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