我正在尝试创建一个函数,该函数返回指定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?!?!
答案 0 :(得分:5)
由于您在罗盘点之间均匀划分角度,我建议您尝试简单的计算和地图查找:
$dir = array("N", "NE", "E", "SE", "S", "SO", "O", "NO", "N");
$grau = 100;
$compass = $dir[floor( ($grau + 22.5) / 45 )];