Stefan Koch: Frage zu switch/case und Bedingungen

Hi!

Ich habe bei einer Variablen viele Fälle zu unterscheiden, darum dachte ich mir das ich sowas mit einer switch/case-Struktur mache:

switch($zahl)
      {
       case <= 10: echo "Zahl ist kleiner oder gleich 10\n";
                   break;
       case <= 20: echo "Zahl ist kleiner gleich 20\n";
                   break;
       }

Leider scheint es dieses case <= 10 nicht u geben, da ich immer einen Parse-Error bekomme. Gibt es keine andere Möglichkeit oder muss ich if /else if Strujturen benutzen?

MfG,

Stefan

  1. Hallo Stefan,

    Leider scheint es dieses case <= 10 nicht u geben, da ich immer
    einen Parse-Error bekomme. Gibt es keine andere Möglichkeit oder
    muss ich if /else if Strujturen benutzen?

    switch($number) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
        echo "Zahl ist kleiner oder gleich 10\n";
        break;
      case 10:
      case ...
    }

    Ich wuerde »if() elsif()«-Strukturen empfehlen.

    Grüße,
     CK

    --
    Microsoft: Where do you want to go today?
    Linux: Where do you want to go tomorrow?
    FreeBSD: Are you guys coming, or what?
    http://wwwtech.de/
  2. Hi,

    Ich habe bei einer Variablen viele Fälle zu unterscheiden, darum dachte ich mir das ich sowas mit einer switch/case-Struktur mache:
    switch($zahl){
           case <= 10: echo "Zahl ist kleiner oder gleich 10\n";break;
           case <= 20: echo "Zahl ist kleiner gleich 20\n";break;}
    Leider scheint es dieses case <= 10 nicht u geben, da ich immer einen Parse-Error bekomme. Gibt es keine andere Möglichkeit oder muss ich if /else if Strujturen benutzen?

    Ohne genauere Kenntnis dessen, was Du bezwecken möchtest (Und jetzt sag' nicht: "Ich will mit einer Variablen verschiedene Fälle unterscheiden" ;-) kann keine Empfehlung abgegeben werden. Aber eine tiefere Erklärung zu switch() kann ich liefern. Ein switch() ist die Zusammenfassung eines Entscheidungsbaumes. Damit das einfach wird (besser gesagt: optimierbar wird, ansonsten wäre ein switch() nicht von einem if/else Konstrukt zu unterscheiden), können nur feste Werte verglichen werden. Meistens auch nur Ganzzahlen (Integer). Intern werden diese Werte nun in eine (balancierten) binären Baum gepackt. Dort können sie sehr schnell und vor allem in konstanter Zeit gefunden werden.

    Ich habe mit Absicht oben reichlich Stichworte eingeflochten, die bei Google gute Ergebnisse zeigen, nutze die Gelegenheit.
    Dann weißt Du auch, warum meist nur Ganzzahlen erlaubt sind.

    so short

    Christoph Zurnieden

    1. Hallo,

      Ich habe bei einer Variablen viele Fälle zu unterscheiden, darum dachte ich mir das ich sowas mit einer switch/case-Struktur mache:
      switch($zahl){
             case <= 10: echo "Zahl ist kleiner oder gleich 10\n";break;
             case <= 20: echo "Zahl ist kleiner gleich 20\n";break;}
      Leider scheint es dieses case <= 10 nicht u geben, da ich immer einen Parse-Error bekomme. Gibt es keine andere Möglichkeit oder muss ich if /else if Strujturen benutzen?

      Ohne genauere Kenntnis dessen, was Du bezwecken möchtest (Und jetzt sag' nicht: "Ich will mit einer Variablen verschiedene Fälle unterscheiden" ;-)

      Mir geht im PHP die switch-Logik der MS-Sprachen ab:
      case 1 to 5, 10 to 12
      ...
      case 6 to 9
      ...
      Beste Grüße
      Viennamade

      1. Hi,

        Mir geht im PHP die switch-Logik der MS-Sprachen ab:
        case 1 to 5, 10 to 12
        ...
        case 6 to 9
        ...

        Das ist keine Logik sondern "nur" eine erweiterte Möglichkeit der Eingabe. Statt nur einer Zahl kannst Du da mehrere eingeben und mußt dabei nicht alle eintippeln sondern kannst eine Reihe angeben. Intern dürfte das dann wieder in einzelne Werte umgewandelt werden.
        Sowas nennt man "syntactic sugar" und ist selten viel wert, ein guter Editor bitet da mehr Möglichkeiten, die Eingabe zu erleichtern.

        Interessant wäre die Möglichkeit einen Automaten mit einem einfachem switch() zu basteln, aber das wäre dann wohl etwas viel verlangt ;-)

        so short

        Christoph Zurnieden

  3. Hallo,

    Leider scheint es dieses case <= 10 nicht u geben, da ich immer einen Parse-Error bekomme. Gibt es keine andere Möglichkeit oder muss ich if /else if Strujturen benutzen?

    switch() kann in Sprachen wie PHP oder JavaScript auch auf Wahrheitswerte pruefen:

    <?php

    $zahl=15;

    switch(true)
    {
      case ($zahl <= 10): echo "Zahl ist kleiner oder gleich 10\n";
      break;
      case ($zahl <= 20): echo "Zahl ist kleiner oder gleich 20\n";
      break;
      default: echo "Kein definierter Fall trifft zu.\n";
      break;
    }

    ?>

    MfG, Thomas

    1. Hallo Thomas,

      switch() kann in Sprachen wie PHP oder JavaScript auch auf Wahrheitswerte pruefen:

      Wobei bei JavaScript zu beachten ist, dass das bloße Einlesen einer Seite mit einer derartigen Konstruktion Netscape 4 zum Absturz bringt. Es nützt auch nichts, die Funktion vorher abzubrechen (also sowas wie if (document.layers) return;); der Absturz erfolgt schon beim Einlesen - d.h. man hat keine Chance, das ohne größere Tricks zu umgehen.

      Viele Grüße,
      Christian