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
|
<?php
/**
* 二分法查找积分对应等级
*
* @param int $score 积分
* @param array $filter 积分规则
*
* @return array $filter
*/
$filter
=
array
(
array
(
'level'
=> 1,
'min'
=> 1,
'max'
=> 50),
array
(
'level'
=> 2,
'min'
=> 51,
'max'
=> 110),
array
(
'level'
=> 3,
'min'
=> 111,
'max'
=> 180),
array
(
'level'
=> 4,
'min'
=> 181,
'max'
=> 260),
array
(
'level'
=> 5,
'min'
=> 261,
'max'
=> 500)
);
function
level_search(
$score
,
$filter
)
{
$half
=
floor
(
count
(
$filter
) / 2);
// 取出中間数
// 判断积分在哪个区间
if
(
$score
<=
$filter
[
$half
- 1][
'max'
]) {
$filter
=
array_slice
(
$filter
, 0 ,
$half
);
}
else
{
$filter
=
array_slice
(
$filter
,
$half
,
count
(
$filter
));
}
// 继续递归直到只剩一个元素
if
(
count
(
$filter
) != 1) {
$filter
= level_search(
$score
,
$filter
);
}
return
$filter
;
}
$result
= level_search(240,
$filter
);
$ret
= current(
$result
);
print_r(
$ret
[
'level'
]);
|
本文转自 IT阿飞 51CTO博客,原文链接:http://blog.51cto.com/itafei/1888451