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
}
Как правило, наблюдается более одного облачного слоя и, следовательно, каждый $cloudCoverage
в слое добавляется к другому при цикле по $metarClouds[0]
. Однако, если облачного слоя нет (clear или "CLR"), он должен быть зарегистрирован как 0. И это происходит. Однако код как-то возвращает «Overcast».
Я проверил оба оператора switch, чтобы убедиться, что CLR передается, когда я ожидаю, и что $cloudCoverage
равняется нулю, когда я ожидаю. Это каждый раз. И, $skyCoverage
все еще регистрируется как ноль непосредственно перед возвратом.
Я попытался установить $cloudCoverage
в 1-1, 0/1, 0.0 или каким-либо другим способом, чтобы гарантировать, что PHP как-то не воспринимает его как нуль и ... каким-то образом ... обрабатывает его неправильно. Если я переписываю так, чтобы $cloudCoverage = 0.01
и пропустил CLR через первый коммутатор, все прошло через второй коммутатор правильно: Очистить. Я также попытался установить в последнем случае значение case 0:
и т. Д., Но все равно получил тот же ошибочный результат.