webForumDet fria alternativet

Switchsats med flera parametrar?

PHP

9 svar · 293 visningar · startad av GrodanBoll

Medlem sedan sep. 2001788 inlägg
Frågan#1

Hej hej :)

Jag skulle behöva ha en switchsats med flera parametrar.
Typ:

switch ($id, $l)
{
  case 2, 's';
     ech0 "Bla bla";
     break;
  o.s.v.
}

Kan man ha flera inparametrar? Har för mig att jag har läst om det någonstans.

Och hur gör man? :q

/G

Medlem sedan maj 200225 inlägg
#2

Borde ju funka om man gör såhär:

switch ($xxxxx)
{
  case xxxxx:
  switch($yyyyy)
  {
    case yyyyy:
    nånting här
    break;

    case zzzzz:
    nånting här
    break;
  }
  break;

  case yyyyy:
  switch ($zzzzz)
  {
    case xxxxx:
    tralala
    break;

    case yyyyy:
    tralala
    break;
  }
  break;
}

Ser säkert jätte rörigt ut, men så blir det, finns säkert smartare sätt också.

Medlem sedan aug. 20002 975 inlägg
#3

Att det går att ha flera alternativ i en case är inga problem:

switch ($var){
  case $var==1 || $var==2:
    //gör något
  break;
  case $var==3 || $var==4:
    //gör något
  break;
}

Om det sen går att skicka in flera variabler att kolla, det har jag ingen aning om. I så fall skulle det vara något liknande detta:

switch ($var1 && $var2){
  case $var1==1 && $var2==2:
    //gör något
  break;
  case $var1==3 && $var2==4:
    //gör något
  break;
}

Om det fungerar har jag som sagt ingen aning om. Testa om du har lust.

Medlem sedan sep. 2001788 inlägg
#4
$a = "kalle";
$b = "ada";

switch ($a && $b)
{
	case ($a == "kalle" && $b == "ada"):
		echo "Det stämmer";
		break;
	case ($a == "pelle" && $b == "ada"):
		echo "Men detta ska ju inte komma ut ju";
		break;
	default:
		echo "Default.";
}

Detta fungerade precis som Matte sa.

Dock fattar jag inte varför det ska vara '&&' istället för ',' som man alltid använder annars (alltså när man skickar in variablerna)?
Kan ni förklara det?

Tackar :bire

/Ni skulle se som Grodan hoppar :)

Medlem sedan juni 20014 290 inlägg
#5

Därför att i detta fallet utnyttjar du inte switch funktionen!

switch( $a && $b ) är alltid uppfylt så länge $a och $b inehåller någonting (värdet SANT).
Sedan i varje case sats blir värdet av dina uttryck SANT, vilket du sedan testar mot uttrycket i swicth() satsen.

Det hadde varit enklare och mera logiskt att i detta fallet använda:

if($a == "kalle" && $b == "ada") then {
  echo "Det stämmer";
} elseif ($a == "pelle" && $b == "ada") then {
  echo "Men detta ska ju inte komma ut ju";
} else {
  echo "Default.";
}

Alltså switch() satsen är onödig eftersom du ändå beräknar saker i case satserna.
Vitsen med switch() är att man beräknar något som resulterar ett svar, sedan jämför man detta enda svar med ett antal case satser.

Se gärna i PHP manualen

Medlem sedan mars 2001593 inlägg
#6

gunnar varför har du med then i if-satserna? det behövs väl inte eller är det bara något jag missat?
är inte

if($a == "kalle" && $b == "ada") then {
  echo "Det stämmer";
} elseif ($a == "pelle" && $b == "ada") then {
  echo "Men detta ska ju inte komma ut ju";
} else {
  echo "Default.";
}

samma som

if($a == "kalle" && $b == "ada") {
  echo "Det stämmer";
} elseif ($a == "pelle" && $b == "ada") {
  echo "Men detta ska ju inte komma ut ju";
} else {
  echo "Default.";
}
Medlem sedan juni 20014 290 inlägg
#7

Riktigt!
Av någon konstig vana så följde dom med på köpet när jag skrev koden. :)

Medlem sedan sep. 2001788 inlägg
#8

Aaaaah, kristallklart.
Fanken vad man vecklar in sig när man har ställt in sig på att använda en funktion, fast man sedan ska ha in lite mera info så omvärderar man inte situationen. E det tunnelseende det heter? :r

Aber ja natürlisch ska jag använda if-satser istället.

Tackar :)

/G

Medlem sedan okt. 2001152 inlägg
#9

GunnarD: ASP-skadad ? =)
Bara du inte gör det till en vana, har en lärare osm blandar C++ och VB variabler hej vilt! :)

Medlem sedan juni 20014 290 inlägg
#10

ASP? knappast :e
Däremot hoppar jag mellan shellscripts, php, c/c++ och perl dagligen. Nu skall jag börja "leka" med Java/J2EE så jag får se vilken röra jag hamnar i.

Varför kan inte syntaxen se samma ut i dom olika språken? :OO

678 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
544 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
544 ms — ändringar (db)