Jan K.: Variable Cases in Switch schleife

Hallo zusammen,

ich möchte gerne ein Menü basteln, das sich selber um menüpunkte vergrössern oder verringern kann. Das ändern der Menüpunkte erfolgt über den Login Bereich, der wie der Homebereich unveräderbar im Menü vorhanden sein soll.

Gespeichert werden die Menüpunkte aus einem Formularfeld in einer csv datei namens menu.txt. Die könnte beispielsweise so aussehen (mit § getrennt): Urlaub§Fotos§Lebenslauf§vermischtes§

switch ($_GET["bereich"]) {

case "einloggen":
echo "irgendein käse zum verwaltungsbereich";
break;

//hier müssten dann die variablen fälle rein.
//Komme aber nicht mit der Logik zurecht, bzw ob es syntaktisch
//überhaupt möglich is variable cases zu gestalten

default:
echo "Hier der Home bereich";
break;
}

Da, wo jetzt der kommentar steht, hatte ich ansatzweise probiert einen variablen fall folgendermassen zu gestalten:

$datei=fopen("menu.txt","r");
 $leseteile = fgetcsv($datei, 400000, §);
 fclose($datei);
 $anzahl=(count($leseteile)-2);

for ($i=0;$i<=$anzahl;$i++){
 $fall=$leseteile[$i];
 case "$fall":
 echo "menüpunkt ".$leseteile[$i];

break;
        }

Irendwie klar, das es so nicht geht, aber irgenwie auch nicht. Ich komm in dem Punkt nicht mit der Logik hinterher, hilfee!

Gruß,

Jan

  1. hi,

    Da, wo jetzt der kommentar steht, hatte ich ansatzweise probiert einen variablen fall folgendermassen zu gestalten:

    Nee, kannste knicken :-)
    Du kannst nicht einfach so PHP-Code dynamisch per PHP generieren - außer du würdest eval() verwenden, wäre m.E. hier aber auch Unfug.

    Warum legst du die Daten nicht einfach in einem assoziativen Array ab - und greifst dann mit $_GET["bereich"] als Index darauf zu?
    (Vorher noch mit isset(), array_key_exists() o.ä. prüfen, ob zum übergebenen Wert einen Key gibt, sonst Defaultfall ausgeben.)

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Warum legst du die Daten nicht einfach in einem assoziativen Array ab - und greifst dann mit $_GET["bereich"] als Index darauf zu?
      (Vorher noch mit isset(), array_key_exists() o.ä. prüfen, ob zum übergebenen Wert einen Key gibt, sonst Defaultfall ausgeben.)

      Array, ok
      Da kann ich dir nicht folgen, mit array_key_exists() hab ich noch nie kontakt gehabt. Kannst mir ein verdeutlichendes beispiel für diese Methode geben?

      Gruß,

      Jan

      1. habe d'ehre Jan

        Array, ok
        Da kann ich dir nicht folgen, mit array_key_exists() hab ich noch nie kontakt gehabt. Kannst mir ein verdeutlichendes beispiel für diese Methode geben?

        http://de3.php.net/manual/de/function.array-key-exists.php

        man liest sich
        Wilhelm

        1. Soweit bin ich auch schon.

          Fehlt nur nur ein beispiel wie man den abzug verwendet ;).

          Gruß,

          Jan

          1. Ich glaube verstanden zu haben wie das mit dem array_key_exists und isset funktionieren soll.
            Nur leider wird die bedingung irgendwie nie wahr.

            $datei=fopen("menu.txt","r");
            $leseteile = fgetcsv($datei, 400000, §);
            fclose($datei);
            $suchbegriff=$_GET["section"];
            if (isset($leseteile[$suchbegriff])){
             echo "gefunden";
             }
            if (array_key_exists($suchbegriff,$leseteile)){
            echo "gefunden";
             }
            print_r($leseteile);
            // Array ( [0] => Lebenslauf [1] => Urlaub [2] => Fotos [3] => Vermischtes [4] => )
            print_r($_GET["section"]);
            // funzt auch, gibt die sektion korrekt wieder

            Kann mir hemand an der stelle sagen wieso nie die Bedingung ausgeführt wird?

            Gruß,

            Jan

            1. hi,

              $suchbegriff=$_GET["section"];
              if (isset($leseteile[$suchbegriff])){
              echo "gefunden";
              }
              if (array_key_exists($suchbegriff,$leseteile)){
              echo "gefunden";
              }

              Was steht denn in $suchbegriff?

              print_r($leseteile);
              // Array ( [0] => Lebenslauf [1] => Urlaub [2] => Fotos [3] => Vermischtes [4] => )
              print_r($_GET["section"]);
              // funzt auch, gibt die sektion korrekt wieder

              Du hast hier nur Zahlen als Schlüssel.
              Also greifst du auch mit einer Zahl als Suchbegriff darauf zu?

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Danke für den Hinweis mit den zahlen als Index, das hat mir nochmal im Arbeiten mit arrays vorrangebracht. So läuft das jetzt:

                $datei=fopen("menu.txt","r");
                $leseteile = fgetcsv($datei, 400000, §);
                fclose($datei);
                $anzahl=(count($leseteile)-2);

                for ($i=0;$i<=$anzahl;$i++){
                $sucharray[($leseteile[$i])]=$i;
                }

                if ( isset($sucharray[($_GET["section"])]) ){
                 echo " hier wird dann der dynamische inhalt generiert";
                }
                else {

                echo " Die switch case schleife mit login und home, der default fall";

                }

                Gruß,

                Jan

  2. Hi,

    nur so am Rande bemerkt:

    Die Kontrollstruktur switch ist (ebensowenig wie if) eine Schleife.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.