要求是这样的: 根据一段区间算等级
钻石店铺
一钻店铺
二钻店铺
三钻店铺
四钻店铺
五钻店铺
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 '五冠店铺';
// ...
// 注意顺序
沧海一幻觉
TA贡献1824条经验 获得超5个赞
这个还只能if,不能switch
if($score>=1001 && $score <= 2000) {
return '五钻';
}elseif($score >= 591 && $score <= 1000) {
return '四钻';
}
冉冉说
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;
阿晨1998
TA贡献2037条经验 获得超6个赞
换个思路吧,虽然特定场景很实用, 空间换时间
用程序预先成一个文件数组文件,程序运行时读到内存中
$scoreMap = [
1 => '一钻店铺',
2 => '一钻店铺',
3 => '一钻店铺',
4 => '一钻店铺',
5 => '一钻店铺',
6 => '一钻店铺',
7 => '一钻店铺',
// 一直生成下去
];
判断的时候 主要考虑最大,最小的临界值,满足条件只要 $scoreMap[$score] 就行了 。
- 8 回答
- 0 关注
- 3859 浏览
添加回答
举报
0/150
提交
取消