samteam: switch

Hallo

ich habe eine IF-Abfrage die ich gerne in switch umwandeln lassen würde mit else habe ich aber Problem kann mir jemand das mal umwandeln
Danke

if ($zeile["menuid"]== "2")
{
$menue_id = "2";
echo "<td><a href="#">".$zeile["menu"]."</a></td>";

} else {

echo "<td><a href="#">".$zeile["menu"]."</a></td>";

Danke

  1. hi,

    http://www.php.net/manual/de/control-structures.switch.php

    'default:' ist das, was du anstelle von 'else' brauchst.

    mfg, JL

    1. 'default:' ist das, was du anstelle von 'else' brauchst.

      Hallo

      ja aber wie setze ich es bei meiner Abfrage ein

      switch ($zeile["menuid"])
      {
      case 1: $menue_id = "2";
      break;
      case 2: $menue_id = "3";
      break;
      case 2: $menue_id = "4";
      break;
      case 2: $menue_id = "5";
      break;
      default:
      ???
      $menue_id != $zeile["menuid"];
      endswitch;

      voerher
      if ($zeile["menuid"]== "2")
      {
      $menue_id = "2";

      echo "<td><a href="#">".$menue_id."</a></td>";
      } else {
      echo "<td><a href="#">".$menue_id."</a></td>";
      }

  2. Hallo samteam,

    ich habe eine IF-Abfrage die ich gerne in switch umwandeln lassen würde mit else habe ich aber Problem kann mir jemand das mal umwandeln

    switch($zeile["menuid"])
    {
       case "2":
          $menue_id = "2";
          echo "<td><a href="#">".$zeile["menu"]."</a></td>";
          break;
       default:
          echo "<td><a href="#">".$zeile["menu"]."</a></td>";
    }

    ...und was die Probleme mit Else betrifft, wird Dir im Chat sicher gerne geholfen... Laß Dich doch einfach nicht von Frauenproblemen vom Lesen des PHP-Manuals abhalten (*scnr*).

    Aber mal im Ernst: was ist Dein Problem, jetzt hast Du das gleiche mit switch, was soll das gegenüber der if/else-Kombi bringen?

    Viele Grüße
    Stephan

    1. Hallo

      danke für die Bemerkung

      Aber mal im Ernst: was ist Dein Problem, jetzt hast Du das gleiche mit switch, was soll das gegenüber der if/else-Kombi bringen?

      ich habe mehrere CAS mit gleicher Variable

      case 1: $menue_id = "2";
      break;
      case 2: $menue_id = "3";
      break;
      case 2: $menue_id = "4";
      break;
      case 2: $menue_id = "5";

      muß ich dann bei jedem case dan das echo ausgeben oder kann ich das auch verkürzen wie bei
      if
      elseif
      elseif
      else

      1. Hallo samteam,

        ich habe mehrere CAS mit gleicher Variable

        case 1: $menue_id = "2";
        break;
        case 2: $menue_id = "3";
        break;
        case 2: $menue_id = "4";
        break;
        case 2: $menue_id = "5";

        muß ich dann bei jedem case dan das echo ausgeben oder kann ich das auch verkürzen wie bei

        Wenn Du den "break" weglässt, dann werden alle nachfolgenden cases ausgeführt, also mit
        case 1:
        case 2:
        case 3:
          $menue_id="2";
          break;

        kriegst Du für Wert 1-3 der geswitchten Variablen $menue_id als "2" gesetzt.
        So wie Du es geschrieben hast, macht es wenig Sinn, weil Du die case-statements wiederholst, und Du gibt PHP im Endeffekt für case 2 drei wiedersprüchliche Anweisungen (ich hab's nicht ausprobiert, aber normalerweise sollte bei case 2 $menue_id am Ende dann 5 sein, die beiden anderen cases sind dann völlig überflüssig.)

        Vielleicht kannst Du mal schildern, wofür Du das brauchst, im Moment verstehe ich Dein Problem echt nicht. Da der String bei Echo auch keine Variablen enthälten, die im if/else oder switch verändert werden, kannst Du sie auch einfach nachher ausgeben, ohne Bedingung.

        Viele Grüße
        Stephan

        1. Hallo

          ich habe das Problem das wenn ich eine If-Abfrage mache bzw. jetzt mit switch arbeite das ein Wert immer von der ersten Abfrage genommen wird:

          <table cellspacing="0" cellpadding="0" border="1">
          <tr>
          <td class="blank<? echo $menucount;?>"> </td>
          <?
          $menue_select = mysql_query("select * from wsc_menu
          where hnr='19999'
          and aktiv='1'
          order by menuid");
          while($zeile = mysql_fetch_array($menue_select))
          {
            switch ($zeile["menuid"])
            {
            case 2: $menue_id = "2";
            echo "<td><a href="#?menue_id=".$menue_id.">
            ".$zeile["menu"]."</a></td>";
            break;
            case 3: $menue_id = "3";
            echo "<td><a href="#?menue_id=".$menue_id.">
            ".$zeile["menu"]."</a></td>";
            break;
            default:
            echo "<td><a href="#?menue_id=".$menue_id.">
            ".$zeile["menu"]."</a></td>";
            }
          }
          ?>
          </tr>
          </table>

          So das ist mein gekürztes Script, beim ausführen sehe ich dann bei MouseOver das der wert menue_id immer den Wert von case 2: hat aber die anderen werden ignoriert.

          Wenn ich nur mit einem Case oder if-Abfrage arbeite klappt alles

          ich brauch für jede ausgegeben Variable $zeile["menu"] die dazugehörige Variable menu_id

          es sind alle in der DB vorhanden

          wie gesagt wenn ich einen fest Wert vorgebe, dann klappt es nur bei einer größeren Abfrage nicht mehr.

          Verstanden?

          Danke

          1. Hallo samteam!

            Ich bin mir nicht ganz sicher ob der Code so laufen soll wie du ihn geschrieben hast, etwas aufgeräumt sieht das nämlich so aus:

            while($zeile = mysql_fetch_array($menue_select))
            {
              switch ($zeile["menuid"])
              {
              case 2:
                $menue_id = "2";
                break;
              case 3:
                $menue_id = "3";
                break;
              default:
                // hier wird $menu_id nicht gesetzt
                break;
              }
              echo "<td><a href="#?menue_id=$menue_id>"",$zeile["menu"],"</a></td>";
            }

            und das bedeutet, dass die Menü Id nur 2 oder 3 werden kann, bei allen anderen behält sie ihren letzen Wert bei, der kann sogar undefiniert (da macht php dann "" oder 0 von) sein.

            Beispiel, falls in der db die Einträge 1,2,4,5 vorkommen:

            Menü Id   Angezeigt
            1         #?menue_id=
            2         #?menue_id=2
            4         #?menue_id=2
            5         #?menue_id=2

            soweit so unklar?

            Gruss,
             Carsten

            1. Hallo,

              und das bedeutet, dass die Menü Id nur 2 oder 3 werden kann, ...

              ich brauch aber zu jedem Menü ID die dazugehörige Nr

              Das heißt wenn ich mit der Maus über den Menülink Menü1 gehe brauche ich hierzu den  Menü ID 1 wegen einem Layer/Ebene die dann zu dem passenden Menüpunkt angezeigt wird

              bei Menü2 die Menü ID 2
              bei Menü3 die Menü ID 3

              wenn die Maus den Link verläst ist dann auch der Layer/Ebene nicht mehr sichtbar

              deswegen muß ich abfragen

              Vileicht gehe ich das ganze auch falsch an

              Verstanden?

              Danke

          2. Hallo samteam,

            while($zeile = mysql_fetch_array($menue_select))
            {
              switch ($zeile["menuid"])
              {
              case 2: $menue_id = "2";
              echo "<td><a href="#?menue_id=".$menue_id.">
              ".$zeile["menu"]."</a></td>";
              break;
              case 3: $menue_id = "3";
              echo "<td><a href="#?menue_id=".$menue_id.">
              ".$zeile["menu"]."</a></td>";
              break;
              default:
              echo "<td><a href="#?menue_id=".$menue_id.">
              ".$zeile["menu"]."</a></td>";
              }
            }
            So das ist mein gekürztes Script, beim ausführen sehe ich dann bei MouseOver das der wert menue_id immer den Wert von case 2: hat aber die anderen werden ignoriert.
            Wenn ich nur mit einem Case oder if-Abfrage arbeite klappt alles

            ich brauch für jede ausgegeben Variable $zeile["menu"] die dazugehörige Variable menu_id
            Verstanden?

            Naja, so halb. Dein switch-statement ist syntaktisch ok, daran liegt es also nicht. Ich nehme mal an, daß beim ersten Durchlauf der Schleife case 2 erfüllt ist, dann wird $menue_id auf 2 gesetzt. Bei allen folgenden Durchläufen ist dann wohl kein case erfüllt, PHP landet bei default, und da Du $menue_id nicht bei jedem Durchlauf initialisierst ($menue_id="";), wird wieder 2 ausgegeben.
            Probier mal $menue_id=""; vor den switch zu setzen, dann vermeidest Du, daß der vorherige Schleifendurchlauf eine Rolle spielt. Generell ist aber, so wie das Skript ist, der switch überflüssig:

            while($zeile = mysql_fetch_array($menue_select))
            {
               echo "<td><a href="#?menue_id=".$zeile["menuid"].""".$zeile["menu"]."</a></td>";
            }

            Das würde genauso gut funktionieren.

            Viele Grüße
            Stephan

        2. Hallo Stephan!

          case 1: $menue_id = "2";
          break;
          case 2: $menue_id = "3";
          break;
          case 2: $menue_id = "4";
          break;
          case 2: $menue_id = "5";

          So wie Du es geschrieben hast, macht es wenig Sinn, weil Du die case-statements wiederholst, und Du gibt PHP im Endeffekt für case 2 drei wiedersprüchliche Anweisungen

          Mein PHP nimmt dann nur den ersten, in C gibt sowas einen Compilerfehler (was IMHO sinnvoller ist).

          Gruss,
           Carsten