评论里的「积分/50算法」显然是不能满足楼主的积分等级判断的,因为积分等级规则可能会变动,而且这个算法本身就有问题。
有序的数据查找可以用二分法来查找,给你个简单实现的代码
/**
* 二分法查找
*
* @param int $score 积分
* @param array $filter 积分规则
*
* @return array $filter
*/
function 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 = search($score, $filter);
}
return $filter;
}
$filter = [
['level' => 1, 'min' => 1, 'max' => 50],
['level' => 2, 'min' => 51, 'max' => 110],
['level' => 3, 'min' => 111, 'max' => 180],
['level' => 4, 'min' => 181, 'max' => 260],
['level' => 5, 'min' => 261, 'max' => 500],
];
$result = search(240, $filter);
echo current($result)['level'];