php进行二分法查找,做积分排名
/**
* 二分法查找
*
* @param int $score 积分
* @param array $filter 积分规则
*
* @return array $filter
*
* 请求方式 $result = TribeMemeberLevel(240, $filter);
echo current($result)['level'];
*/
function TribeMemeberLevel($score,$filter=null){
$array = [
['level' => "成员",'id'=>'4', 'min' => 0, 'max' => 1430],
['level' => "战士",'id'=>'3', 'min' => 1431, 'max' =>50000],
['level' => "使者",'id'=>'2', 'min' => 50001, 'max' => 99999999999999],
];
$filter=$filter?$filter:$array;
$mid = intval(count($filter) / 2); // 取出中間数
// 判断贡献值在哪个区间
if ($score <= $filter[$mid - 1]['max']) {
$filter = array_slice($filter, 0 , $mid);
} else {
$filter = array_slice($filter, $mid , count($filter));
}
// 继续递归直到只剩一个元素
if (count($filter) != 1) {
$filter = TribeMemeberLevel($score,$filter);
}
return $filter;
}