我试图创建一个函数,根据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?!?
case
声明应该只包含静态值,而不是表达式。它们不是if
条件。 - marioin_array()
返回一个布尔值true
或false
:因此,您在$grau
上的 switch 语句正在将$grau
与这些可能的布尔值进行比较;这是一种情况,其中一系列if... elseif... elseif...
语句很可能是更好的选择;或者使用针对您的范围值数组的查找。 - Mark Bakerswitch($grau) { case in_array($grau, range(0,22,1)): $prnt = "N"; break; case in_array($grau, range(23,67,1)): $prnt = "NE"; break;
- John Condeswitch(true) {}
在你的 case 语句中添加比较条件(返回布尔值 true 或 false)。我最近回答了一个类似的问题,我会尝试找到它。 - scrowlerswitch(true){
。 - Christian