function skyCoverage($metarClouds) {
foreach($metarClouds[0] as $cloudReport) {
$coverageCode = substr($cloudReport, 0, 3);
// I check $coverageCode here, and it is indeed "CLR"
switch($coverageCode) {
case "CLR":
$cloudCoverage = 0;
break;
case "FEW":
$cloudCoverage = 1/8;
break;
case "SCT":
$cloudCoverage = 3/8;
break;
case "BKN":
$cloudCoverage = 5/8;
break;
case "OVC":
$cloudCoverage = 8/8;
break;
}
$skyCoverage = $skyCoverage + $cloudCoverage;
}
// I check $skyCoverage here, and it is indeed 0
switch ($skyCoverage) {
case ($skyCoverage >= 1.00):
$skyCondition = "Overcast";
// I do an echo $skyCoverage; here, and it actually spits out 0 still, even though it obviously shouldn't do anything at all
break;
case ($skyCoverage >= 0.75):
$skyCondition = "Cloudy";
break;
case ($skyCoverage >= 0.625):
$skyCondition = "Mostly Cloudy";
break;
case ($skyCoverage >= 0.5):
$skyCondition = "Scattered Clouds";
break;
case ($skyCoverage >= 0.375):
$skyCondition = "Partly Cloudy";
break;
case ($skyCoverage >= 0.125):
$skyCondition = "Mostly Clear";
break;
case ($skyCoverage < 0.125):
$skyCondition = "Clear";
break;
}
// $skyCoverage is still zero here
return $skyCondition;
// Somehow $skyCondition is "Overcast" with $skyCoverage = 0
}Divergence instruction switch résultats
En règle générale, plus d'une couche de nuages est observée et, par conséquent, chaque $cloudCoverage
à la couche est ajoutée sur l'autre en boucle à travers $metarClouds[0]
. Cependant, s'il n'y a pas de couche de nuages (clear, ou "CLR"), alors il devrait s'inscrire comme 0. Et c'est le cas. Cependant, le code renvoie en quelque sorte "Overcast".
J'ai vérifié les deux instructions de commutateur pour m'assurer que "CLR" est passé quand je m'attends à ce qu'il est, et que $cloudCoverage
équivaut à zéro quand je m'attends. C'est, à chaque fois. Et, $skyCoverage
enregistre toujours comme zéro juste avant le retour.
J'ai essayé de mettre $cloudCoverage
à 1-1, 0/1, 0.0, ou une autre méthode pour s'assurer que PHP ne le traite pas comme null et ... en quelque sorte ... le traiter de manière incorrecte. Si je réécris de sorte que $cloudCoverage = 0.01
et passer CLR par le biais du premier commutateur, tout passe par le deuxième commutateur correctement: Effacer. J'ai également essayé de placer le dernier cas à case 0:
etc., mais ai toujours le même résultat erroné.