regexp in switch-statement

Zijn regex’s toegestaan ​​in PHP switch/case statements en hoe deze te gebruiken?


Antwoord 1, autoriteit 100%

Switch-case-instructie werkt als if-elseif.
Behalve dat je regex kunt gebruiken voor if-elseif, kun je het ook in switch-case gebruiken.

if (preg_match('/John.*/', $name)) {
    // do stuff for people whose name is John, Johnny, ...
}

kan worden gecodeerd als

switch $name {
    case (preg_match('/John.*/', $name) ? true : false) :
        // do stuff for people whose name is John, Johnny, ...
        break;
}

Hopelijk helpt dit.


Antwoord 2, autoriteit 14%

Nee of slechts beperkt. U kunt bijvoorbeeld overschakelen naar true:

switch (true) {
    case $a == 'A':
        break;
    case preg_match('~~', $a);
        break;
}

Dit geeft je in feite een if-elseif-else-instructie, maar met syntaxis en macht van switch(bijvoorbeeld fall-through.)


Antwoord 3, autoriteit 11%

Ja, maar u moet deze techniek gebruiken om problemen te voorkomen wanneer het schakelargument verandert in false:

switch ($name) {
  case preg_match('/John.*/', $name) ? $name : !$name:
    // do stuff
}

Antwoord 4

Houd er rekening mee dat het bovenstaande antwoord enigszins als volgt kan worden geoptimaliseerd:

Wijzigen:

switch $name {
    case (preg_match('/John.*/', $name) ? true : false) :
        // do stuff for people whose name is John, Johnny, ...
        break;
}

Aan:

switch $name {
    case (bool)preg_match('/John.*/', $name) :
        // do stuff for people whose name is John, Johnny, ...
        break;
}

Other episodes