带有in_array()和range()的PHP switch()无法正常工作

时间:2014-03-14 23:08:13

标签: php function

我正在尝试创建一个函数,该函数返回指定0到360度角度的罗盘点,并且遇到了这个函数。它起作用,除非角度为0 ......并且 我无法理解为什么这段代码不起作用:

echo rosaventos(0);
function rosaventos($grau,$slim=true){
    switch($grau) {
        case in_array($grau, range(0,22,1)):{
            $prnt = "N";
            break;
        }
        case in_array($grau, range(23,67,1)):{
            $prnt = "NE";
            break;
        }
        case in_array($grau, range(68,112,1)):{
            $prnt = "E";
            break;
        }
        case in_array($grau, range(113,157,1)):{
            $prnt = "SE";
            break;
        }
        case in_array($grau, range(158,202,1)):{
            $prnt = "S";
            break;
        }
        case in_array($grau, range(203,247,1)):{
            $prnt = "SO";
            break;
        }
        case in_array($grau, range(248,292,1)):{
            $prnt = "O";
            break;
        }
        case in_array($grau, range(293,337,1)):{
            $prnt = "NO";
            break;
        }
        case in_array($grau, range(338,360,1)):{
            $prnt = "N";
            break;
        }
        default: {
            $prnt = "-?-";
        }
    }
    if($slim){
        return $prnt;
    }else{
        return $prnt."-Extended";
    }   
}

结果是

NE
,但它应该是
N

任何人都可以解释原因,以及如何解决它?

由于

编辑1

确定我在代码中出错了,条件应该是:

(...)
swich(true) {
(...)

这是一种低效的做事方式: 我发现如果我尝试

echo rosaventos("0");

使用原始代码,结果是正确的

N
?!?!

1 个答案:

答案 0 :(得分:5)

由于您在罗盘点之间均匀划分角度,我建议您尝试简单的计算和地图查找:

$dir = array("N", "NE", "E", "SE", "S", "SO", "O", "NO", "N");

$grau = 100;
$compass = $dir[floor( ($grau + 22.5) / 45 )];