2011-07-05 10 views
5

Czy jest możliwe, aby instrukcja switcha PHP przyjęła 2 argumenty? Na przykład:Czy instrukcja switch może przyjmować dwa argumenty?

switch (firstVal, secondVal){ 

    case firstVal == "YN" && secondVal == "NN": 
    thisDesc = "this is the outcome: YN and NN"; 
    break; 

    case firstVal == "YY" && secondVal == "NN": 
    thisDesc = "this is the outcome: YY and NN"; 
    break; 
} 

Wielkie dzięki, nie robiłem PHP od lat!

Odpowiedz

2

No, ale jeśli sprawa jest tak proste, jak to, co masz, po prostu złączyć dwa wejścia i test dla wartości łączonych:

switch ($firstval . $secondval) { 
case "YNNN": ... 
case "YYNN": ... 
} 
+0

Chociaż wygląda na przyzwoite rozwiązanie, zarówno '$ firstval' i' $ secondval' muszą mieć predefiniowaną długość lub typ. Myślę, że próbuję powiedzieć, że jeśli pierwszym jest "Y", a drugim jest "NNN", aw innym przypadku pierwszym jest "YN", a drugim "NN", nie sposób je odróżnić ponieważ połączona wartość będzie "YNNN". –

+0

@Francois: Możesz wprowadzić separato, aby upewnić się, że wartości nie są pomieszane. '$ firstVal. "|" . $ secondVal' i 'case 'YN | NN'' /' case' YY | NN'' (i tak dalej). – KingCrunch

+0

Wiem, dlatego włożyłem disclamer. Ale może to nadal działać, jeśli znasz znak, który nie może być w żadnej z tych zmiennych. Po prostu wtykaj to między nimi. Nie skaluje się jednak dobrze, zastępując zwykłymi blokami, jeśli/else jest prawdopodobnie lepszy na dłuższą metę. – Mat

0

Jestem prawie pewien, że nie można tego zrobić, nie tylko w PHP, ale w dowolnym innym języku programowania.

6

Nie, nie można. switch -statement jak

switch ($a) { 
    case 1: 
    break; 
    case 2: 
    break; 
} 

który jest skutecznie takie same jak

if ($a == 1) { 
} else if ($a == 2) { 
} 

można użyć nieco inną konstrukcję

switch (true) { 
    case $firstVal == "YN" && $secondVal == "NN": 
    break; 
    case $firstVal == "YY" && $secondVal == "NN": 
    break; 
} 

co jest równoważne

if (true == ($firstVal == "YN" && $secondVal == "NN")) { 
} else if (true == ($firstVal == "YY" && $secondVal == "NN")) { 
} 

W niektórych przypadkach jest znacznie bardziej czytelny zamiast nieskończonych łańcuchów if-elseif-else.

Powiązane problemy