Seite 1 von 1
Switchanweisung als Schleife möglich?
Verfasst: 16.08.2004 13:57
von exweised
Kann man eine Switchanweisung auch in eine Schleife packen?
Ich habe hier mal ein einfaches Script, wo ich die Switchanweisung in eine Schleife packen wollte. Bekomme aber eine Fehlermeldung. Ist was an dem Beispiel falsch oder ist das einfach so nicht möglich?
Code: Alles auswählen
<?php
$kategorie = array(
"1" => "Obst",
"2" => "Gemüse",
"3" => "Käse",
"4" => "Wurst",
"5" => "Teigwaren",
"6" => "Gewürze"
);
?>
<form action="test.php" method="get">
Sie haben die Wahl zwischen<br>
<?php
foreach( $kategorie as $key => $value )
{
echo "<input type=\"radio\" name=\"val\" value=" . $key . ">" . $value . "<br>\n";
}
?>
<input type="submit">
</form>
<?php
switch ($_GET["val"])
{
foreach( $kategorie as $key => $value )
{
case $key:
echo "Sie haben " . $value . " ausgewählt!<br>\n";
break;
}
default:
echo "Sie haben bisher nichts ausgewählt!";
break;
}
?>
Fehlermeldung ist folgende:
Parse error: parse error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}' in test.php on line 31
Zeile 31 ist die besagte Schleife in der Switchanweisung.
Verfasst: 16.08.2004 14:21
von Amlor
<?
Code: Alles auswählen
for ($iCount = 0; $iCount < 10; $iCount++) {
switch ($sCapture) {
case "bla":
break;
default:
}
}
geht.. gibt auch kein grund, warum es nicht gehen sollte.. if-anweisungen gehen ja auch und letztendlich ist es ja 'nur' ein anderes bild

Verfasst: 16.08.2004 14:49
von Blutgerinsel
Du kannst einen Switch Block aber nicht zweckentfremden und zwischen
Code: Alles auswählen
Switch($blubb) {
//hier was anderes nehmen als
Case "wow":
break;
}
Du kannst aber ohne Probleme um den Switchblock eine Schleife verwenden solange der Block in sich geschlossen ist kein Problem ist ja nichts anderes als ein If
Verfasst: 16.08.2004 15:06
von exweised
Ah, ok. Aber sieht das jetzt so aus:
Code: Alles auswählen
foreach( $kategorie as $key => $value )
{
switch ($_GET["val"])
{
case $key:
echo "Sie haben " . $value . " ausgewählt!<br>\n";
break;
default:
echo "Sie haben bisher nichts ausgewählt!";
break;
}
}
habe ich einige male die Standartanweisung auf dem Bildschirm.
Sieht es so aus:
Code: Alles auswählen
foreach( $kategorie as $key => $value )
{
switch ($_GET["val"])
{
case $key:
echo "Sie haben " . $value . " ausgewählt!<br>\n";
break;
}
}
switch ($_GET["val"])
{
default:
echo "Sie haben bisher nichts ausgewählt!";
break;
}
habe ich nur einmal die Standartanweisung auf dem Bildschirm, dafür aber auch immer, trotz anderer Auswahl.

Verfasst: 16.08.2004 16:03
von k-5
hm .. setz ne variable in dem switch auf true .. und überprüfe ob sie am schluss gesetzt wurde .. wenn nicht wird noch default angezeigt ..
aber BITTE .. schmeiß switch raus .. und nehm dafür if

..
Verfasst: 16.08.2004 16:30
von exweised
Ja, der Code von mir sollte nur als Beispiel dienen. Mein Quellcode sieht ganz anders aus.

Aber beinhaltet halt ein Switch und ich wollt das alles mit einer Schleife vereinfachen.
Verfasst: 16.08.2004 19:20
von Blutgerinsel
exweised hat geschrieben:Ja, der Code von mir sollte nur als Beispiel dienen. Mein Quellcode sieht ganz anders aus.

Aber beinhaltet halt ein Switch und ich wollt das alles mit einer Schleife vereinfachen.
Dann sollen diese Mehrfach ausgaben sein?
wozu $key
brauchst auch noch den Array Schlüssel?
Verfasst: 16.08.2004 19:53
von exweised
Das $key diente in der Switchanweisung gleichzeitig für den case.
Aber das Thema ist durch. Ich musste es jetzt doch anders lösen, da durch einer Schleife mir der Defaultwert gleich der maximalen Anzahl ausgegeben wurde. Da nützt mir die Schleife einfach doch nix.
Verfasst: 16.08.2004 22:03
von k-5
im notfall .. wenns wirklich viel arbeit erspart .. und du keinen wert auf anständigen code legst .. (es gibt eigentlich kaum was das ekelhafter ist)
stopf den ganzen code in nen string ..
und dann eval( $string );
Verfasst: 16.08.2004 23:37
von Blutgerinsel
exweised hat geschrieben:Das $key diente in der Switchanweisung gleichzeitig für den case.
Ja ok habs beim Überfliegen übersehen....
k-5 hat geschrieben:
stopf den ganzen code in nen string ..
und dann eval( $string );
Und dann soll er nicht die Übersicht verlieren?
Der Befehl wird i.d.R. für aus der DB, File kommende PHP Befehle verwendet und auch nur da machen sie zumindest teilweise Sinn.
Würde hiervon aber dringenst abraten......