PHP获取用户等级

由于项目需要用到用户等级功能,网络上的大部分都是循环判断,感觉不太优雅,所以自己写了一个,大家共同进步,有更好的方法可以提出。

// 等级配置文件 exp:所需经验值 title:等级头衔 key:等级图标 
$grade = [
    1  => ['exp' => 0, 'title' => '可爱萌新', 'key' => 'new'],
    2  => ['exp' => 10, 'title' => '可爱萌新', 'key' => 'new'],
    3  => ['exp' => 30, 'title' => '可爱萌新', 'key' => 'new'],
    4  => ['exp' => 60, 'title' => '可爱萌新', 'key' => 'new'],
    5  => ['exp' => 100, 'title' => '可爱萌新', 'key' => 'new'],
    6  => ['exp' => 180, 'title' => '发烧友', 'key' => 'hot'],
    7  => ['exp' => 340, 'title' => '发烧友', 'key' => 'hot'],
    8  => ['exp' => 580, 'title' => '发烧友', 'key' => 'hot'],
    9  => ['exp' => 900, 'title' => '发烧友', 'key' => 'hot'],
    10 => ['exp' => 1300, 'title' => '发烧友', 'key' => 'hot'],
    11 => ['exp' => 1780, 'title' => '高能达人', 'key' => 'power'],
    12 => ['exp' => 2340, 'title' => '高能达人', 'key' => 'power'],
    13 => ['exp' => 2980, 'title' => '高能达人', 'key' => 'power'],
    14 => ['exp' => 3700, 'title' => '高能达人', 'key' => 'power'],
    15 => ['exp' => 4500, 'title' => '高能达人', 'key' => 'power'],
    16 => ['exp' => 5380, 'title' => '资深大师', 'key' => 'master'],
    17 => ['exp' => 6240, 'title' => '资深大师', 'key' => 'master'],
    18 => ['exp' => 7380, 'title' => '资深大师', 'key' => 'master'],
    19 => ['exp' => 8500, 'title' => '资深大师', 'key' => 'master'],
    20 => ['exp' => 9700, 'title' => '资深大师', 'key' => 'master'],
    21 => ['exp' => 10980, 'title' => '传说', 'key' => 'legend'],
    22 => ['exp' => 12340, 'title' => '传说', 'key' => 'legend'],
    23 => ['exp' => 13780, 'title' => '传说', 'key' => 'legend'],
    24 => ['exp' => 15300, 'title' => '传说', 'key' => 'legend'],
    25 => ['exp' => 16900, 'title' => '传说', 'key' => 'legend'],
];

/**
 * funcionName  获取等级级别
 *
 * options.
 *
 * @param   int $score 用户积分
 * @return array
 *
 * @author  雪后西溏 <958808264@qq.com>
 */
function get_grade_level($score)
{
    // 获取配置文件
    $data = config('grade');
    // 获取经验值
    $exp = array_column($data, 'exp');
    // 获取在基准线中的等级
    if (in_array($score, $exp)) {
        $level = array_flip($exp)[$score] + 1;
    } else {
        // 把分数混入数组并排序
        array_push($exp, $score);
        sort($exp);
        $level = array_flip($exp)[$score];
    }
    $result = [
        'level' => $level,
        'key'   => $data[$level]['key'],
        'title' => $data[$level]['title'],
    ];

    return $result;

}
// 获取等级级别
$res =  get_grade_level(69);
var_dump($res);

结果如图

 

posted @ 2021-02-08 16:39  雪后西溏  阅读(295)  评论(0)    收藏  举报