鍍金池/ 問答/PHP/ 如何快速判斷數(shù)字在那個(gè)區(qū)間?

如何快速判斷數(shù)字在那個(gè)區(qū)間?

要求是這樣的:
根據(jù)一段區(qū)間算等級

鉆石店鋪

一鉆店鋪 二鉆店鋪 三鉆店鋪 四鉆店鋪 五鉆店鋪
1-50 51-100 101-500 591-1000 1001-2000

皇冠店鋪

一冠店鋪 二冠店鋪 三冠店鋪 四冠店鋪 五冠店鋪
2001-4000 4001-6000 6001-8000 8001-10000 10001-12000
現(xiàn)在各一個(gè)數(shù)字 如:80 我怎么知道他在哪一段,當(dāng)然可以 if...else, 這里考慮最簡單的解決方法!
回答
編輯回答
念初

if已經(jīng)是最簡單。更復(fù)雜但一般的可以用線段樹。

2017年11月21日 15:05
編輯回答
妖妖

如果真的從程序算法的概念來寫,是應(yīng)該分級找到區(qū)間(2000),再做判斷嘛

2018年3月4日 05:59
編輯回答
玄鳥

我是web前端,用js的話這么寫算比較接單吧
php 應(yīng)該類似吧

js示例代碼(你可以直接在瀏覽器控制臺運(yùn)行測試)

const rank = (n) =>
(n<=50)&&'一鉆店鋪'||
(n<=100)&&'二鉆店鋪'||
(n<=500)&&'三鉆店鋪'||
(n<=1000)&&'四鉆店鋪'||
(n<=2000)&&'五鉆店鋪'||
(n<=4000)&&'一冠店鋪'||
(n<=6000)&&'二冠店鋪'||
(n<=8000)&&'三冠店鋪'||
(n<=10000)&&'四冠店鋪'||
(n<=12000)&&'五冠店鋪'||'滿級了'

---------------

運(yùn)行
> rank(80)
< "二鉆店鋪"

圖片描述

2018年2月24日 19:40
編輯回答
久舊酒

換個(gè)思路吧,雖然特定場景很實(shí)用, 空間換時(shí)間
用程序預(yù)先成一個(gè)文件數(shù)組文件,程序運(yùn)行時(shí)讀到內(nèi)存中

$scoreMap = [
  1 => '一鉆店鋪',
  2 => '一鉆店鋪',
  3 => '一鉆店鋪',
  4 => '一鉆店鋪',
  5 => '一鉆店鋪',
  6 => '一鉆店鋪',
  7 => '一鉆店鋪',
  // 一直生成下去 
];

判斷的時(shí)候 主要考慮最大,最小的臨界值,滿足條件只要 $scoreMap[$score] 就行了 。

2017年2月18日 00:08
編輯回答
貓小柒

if...else 可以實(shí)現(xiàn),用 switch 也是可以實(shí)現(xiàn)的,下面給一段 switch 的代碼,有點(diǎn)騷,不要輕易模仿(逃

<?php

function rank(int $score): string
{
    switch (true) 
    {
        case $score > 12000: return '爆級了';
        case $score > 10000: return '五冠店鋪';
        case $score > 8000:  return '四冠店鋪';
        case $score > 6000:  return '三冠店鋪';
        case $score > 4000:  return '二冠店鋪';
        case $score > 2000:  return '一冠店鋪';
        case $score > 1000:  return '五鉆店鋪';
        case $score > 590:   return '四鉆店鋪';
        case $score > 500:   return 'emmmm';
        case $score > 100:   return '三鉆店鋪';
        case $score > 50:    return '二鉆店鋪';
        case $score > 0:     return '一鉆店鋪';
        default:             return '菜鳥';
    }
}

for ($i = -60; $i < 12101; $i+=100)
{
    echo 'score: ' . $i . ", rank: " . rank($i) . PHP_EOL;
}

同樣的,if...else 也差不多的寫法:

if ($score > 12000) return '爆級了';
if ($score > 10000) return '五冠店鋪';
// ...
// 注意順序
2018年7月29日 17:11
編輯回答
笑浮塵

這個(gè)還只能if,不能switch

if($score>=1001 && $score <= 2000) {
    return '五鉆';
}elseif($score >= 591 && $score <= 1000) {
    return '四鉆';
}
2017年6月7日 05:19
編輯回答
雨蝶
$ranks = [
    10000=>'五冠店鋪',
    8000=>'四冠店鋪',
    ...
    0=>'一鉆店鋪'
];

$rank_point = 80;
$rank_name = null;
foreach($ranks as $check_rank_point=>$check_rank_name){
    $rank_name = $check_rank_name;
    if($rank_point > $check_rank_point)break;
}
echo $rank_name;
2018年1月9日 00:11
編輯回答
愿如初
class Demo{
    const LEVEL_LIST = [
        50 => '一鉆店鋪',
        100 => '二鉆店鋪',
        500 => '三鉆店鋪',
    ];

    public static function getLevel($point){
        foreach($levelList as $k => $v){
            if ($point <= $k) return $v;
        }
        
        return '爆表了';
    }
}
2018年2月20日 16:01