Switch case falsche Ausgabe des 1. case

Hi,

ich hab mal eine Verständnis Frage. Ich habe mir dieses Script gebaut:

$wind_gust = 0;
echo "Windböen: ${wind_gust} Km/h
";
switch ($wind_gust) {
   case ($wind_gust <= 0)://http://www.wettergefahren-fruehwarnung.de/Artikel/beaufort.html
      $wind_asso = 0; // Wind still
      break;
   case ($wind_gust >= 1 && $wind_gust <= 11):
      $wind_asso = 1; //leichter Wind
      break;
  case ($wind_gust >= 12 && $wind_gust <= 28):
      $wind_asso = 2; //mässiger Wind
      break;
  case ($wind_gust >= 29 && $wind_gust <= 49):
      $wind_asso = 3; //starker Wind
      break;
  case ($wind_gust >= 50 && $wind_gust <= 74):
      $wind_asso = 4; //stürmischer Wind
      break;
  case ($wind_gust >= 75 && $wind_gust <= 200):
      $wind_asso = 5; //Sturm
      break;
}

SetValue(CreateVariableByName($_IPS['SELF'], "Wind Asso", 1, ""), $wind_asso);
echo $wind_asso;

Das Script teilt mir die Windböhen in Stufen ein. z.B. 90 km/h währe Stufe 5 leider funktioniert 0 km/h nicht, da gibt mir das Schript Stufe 1 aus und nicht 0, Warum?

LG Izack

Siwtch … case für deinen Anwendungsfall durch If … elseif … ersetzen


if ($wind_gust <= 0) $wind_asso = 0; // Wind still
elseif ($wind_gust >= 1 && $wind_gust <= 11) $wind_asso = 1; //leichter Wind
elseif ($wind_gust >= 12 && $wind_gust <= 28) $wind_asso = 2; //mässiger Wind
elseif ($wind_gust >= 29 && $wind_gust <= 49) $wind_asso = 3; //starker Wind
elseif ($wind_gust >= 50 && $wind_gust <= 74) $wind_asso = 4; //stürmischer Wind
elseif ($wind_gust >= 75 && $wind_gust <= 200) $wind_asso = 5; //Sturm

Warum ($wind_gust <= 0) bei $wind_gust = 0 nicht TRUE sein soll weiß ich auch nicht.

Allein beim Anblick Deiner Case-Orgie graust es mir schon :banghead:

Umrechnung von Windgeschwindigkeit in Windstärke (bzw. „Windböhen in Stufen“ nach Deiner Definition) geht doch viel einfacher ohne die Abfrage nach Unter- und Obergrenze:


function Beaufort($kmh) {
    $Staerken = array ( 1, 5, 11, 19, 28, 38, 49, 61, 74, 88, 102, 117, 133, );
    $St = 0;
    foreach ( $Staerken as $WS ) {
        if ( $kmh <= $WS )
            return $St;
        $St++;
    }
    return 12;
}


Zur Definition der Windstärken:


        // Beaufort-Stärken (0...12 = ( 1, 5, 11, 19, 28, 38, 49, 61, 74, 88, 102, 117, 133, ) lt. Wetterstation.ips.php
        $St_Namen = array ( // https://de.wikipedia.org/wiki/Beaufortskala
            'Windstille (0-1 km/h)',
            '1 leiser Zug (1-5 km/h)',
            '2 leichte Brise (6-11 km/h)',
            '3 schwache Brise (12-19 km/h)',
            '4 mäßige Brise (20-28 km/h)',
            '5 frischer Wind (29-38 km/h)',
            '6 starker Wind (39-49 km/h)',
            '7 steifer Wind (50-61 km/h)',
            '8 stürmischer Wind (62-74 km/h)',
            '9 Sturm (75-88 km/h)',
            '10 schwerer Sturm (89-102 km/h)',
            '11 orkanartiger Sturm (103-117 km/h)',
            '12 Orkan (>117 km/h)');

Viele Grüße
Harald

danke schön.

LG Izack