-
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] 就行了 。