为了账号安全,请及时绑定邮箱和手机立即绑定

如何快速判断数字在那个区间?

如何快速判断数字在那个区间?

PHP
慕少森 2019-03-11 02:39:19
要求是这样的: 根据一段区间算等级 钻石店铺 一钻店铺 二钻店铺 三钻店铺 四钻店铺 五钻店铺 1-50 51-100 101-500 591-1000 1001-2000 皇冠店铺 一冠店铺 二冠店铺 三冠店铺 四冠店铺 五冠店铺 2001-4000 4001-6000 6001-8000 8001-10000 10001-12000 现在各一个数字 如:80 我怎么知道他在哪一段,当然可以 if...else, 这里考虑最简单的解决方法!
查看完整描述

8 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

if...else 可以实现,用 switch 也是可以实现的,下面给一段 switch 的代码,有点骚,不要轻易模仿(逃

<?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 '五冠店铺';
// ...
// 注意顺序
查看完整回答
反对 回复 2019-03-18
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

这个还只能if,不能switch

if($score>=1001 && $score <= 2000) {
    return '五钻';
}elseif($score >= 591 && $score <= 1000) {
    return '四钻';
}
查看完整回答
反对 回复 2019-03-18
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

如果真的从程序算法的概念来写,是应该分级找到区间(2000),再做判断嘛

查看完整回答
反对 回复 2019-03-18
?
冉冉说

TA贡献1877条经验 获得超1个赞

$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;
查看完整回答
反对 回复 2019-03-18
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

if已经是最简单。更复杂但一般的可以用线段树。

查看完整回答
反对 回复 2019-03-18
?
阿晨1998

TA贡献2037条经验 获得超6个赞

换个思路吧,虽然特定场景很实用, 空间换时间
用程序预先成一个文件数组文件,程序运行时读到内存中

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

判断的时候 主要考虑最大,最小的临界值,满足条件只要 $scoreMap[$score] 就行了 。

查看完整回答
反对 回复 2019-03-18
  • 8 回答
  • 0 关注
  • 3859 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信