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

要求是这样的:
根据一段区间算等级

钻石店铺

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

皇冠店铺

一冠店铺 二冠店铺 三冠店铺 四冠店铺 五冠店铺
2001-4000 4001-6000 6001-8000 8001-10000 10001-12000
现在各一个数字 如:80 我怎么知道他在哪一段,当然可以 if...else, 这里考虑最简单的解决方法!
慕少森
浏览 3884回答 8
8回答

Smart猫小萌

用 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 '五冠店铺'; // ... // 注意顺序

沧海一幻觉

这个还只能if,不能switch if($score>=1001 && $score <= 2000) { return '五钻'; }elseif($score >= 591 && $score <= 1000) { return '四钻'; }

慕侠2389804

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

冉冉说

$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;

慕盖茨4494581

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

阿晨1998

换个思路吧,虽然特定场景很实用, 空间换时间 用程序预先成一个文件数组文件,程序运行时读到内存中 $scoreMap = [ 1 => '一钻店铺', 2 => '一钻店铺', 3 => '一钻店铺', 4 => '一钻店铺', 5 => '一钻店铺', 6 => '一钻店铺', 7 => '一钻店铺', // 一直生成下去 ]; 判断的时候 主要考虑最大,最小的临界值,满足条件只要 $scoreMap[$score] 就行了 。
打开App,查看更多内容
随时随地看视频慕课网APP