-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathslice.php
More file actions
116 lines (104 loc) · 2.9 KB
/
slice.php
File metadata and controls
116 lines (104 loc) · 2.9 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
slice :
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 0,2); // returns "a", "b"
$output= array_merge($output,array_slice($input, 2+1)); // returns "d","e"
var_dump($output );
/**
* 全概率计算
*
* @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4)
* @return string 返回上面数组的key
*/
function random($ps){
static $arr = array();
$key = md5(serialize($ps));
if (!isset($arr[$key])) {
$max = array_sum($ps);
foreach ($ps as $k=>$v) {
$v = $v / $max * 10000;
for ($i=0; $i<$v; $i++) $arr[$key][] = $k;
}
}
return $arr[$key][mt_rand(0,count($arr[$key])-1)];
}
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'=>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),
);
//如果中奖数据是放在数据库里,这里就需要进行判断中奖数量
//在中1、2、3等奖的,如果达到最大数量的则unset相应的奖项,避免重复中大奖
//code here eg:unset($prize_arr['0'])
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);
if(!function_exists('random'))
{
function random($arData, $n=1){
if (!$arData) {
return false;
}
$Point = 1;
foreach($arData as $_d){
if(is_int($_d))
continue;
if($len = strlen(substr($_d,strpos(strval($_d),'.')+1))){
$Point = $len > $Point?($Point = $len):$Point;
}
}
foreach($arData as &$_v){
$_v*=pow(10,$Point);
}
unset($_v);
$sum = array_sum($arData);
$seeds = array();
$start=0;
foreach($arData as $k=>$p){
if($p==0) continue;
$seeds += array_fill($start, $p, $k);
$start += $p;
}
shuffle($seeds);
$count = count($seeds);
$result = array();
$i = $n;
while($i>0){
$rand = mt_rand(0, $count-1);
$result[] = $seeds[$rand];
$i--;
}
return $result;
}
}
?>