php进行二分法查找,做积分排名

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;

}

分享到: