OuzoPower
OuzoPower

Reputation: 278

Possible to compare strings in PHP using a switch statement?

I'm trying to write some PHP code to return a translation based on two parameters: an integer translation id and a two-letters language code.

For this, I nested switch statements. The outer switch works fine, but the inner switch fails and their default is always returned, whichever the value that the $lang parameter takes. In the example below, "Berne" is returned when $lang="de".

I checked, that the value of $lang is correct; it was. Casted $lang as (string) to be sure that it is of the correct type. Tried enclosing the inner switches between brackets, as well as putting double quotes instead of simple ones. Without success. Here's my code:

<?php
switch($id) {
  case 3:
    {
    switch((string)$lang) {
      case 'de':
        $v = 'Bern';
        break;
      case 'en':
        $v = 'Berne';
        break;
      default:
        $v = 'Berne';
      }
    }
    break;

  case 4:
    {
    switch($lang) {
      case 'de':
        $v = 'Zürich';
        break;
      case 'en':
        $v = 'Zurich';
        break;
      default:
        $v = 'Zurich';
      }
    } 
    break;

  default:
    {
    switch($lang) {
      case 'de':
        $v = 'Genf';
        break;
      case 'en':
        $v = 'Geneva';
        break;
      default:
        $v = 'Genève';
      }
    }
    break;
}
return $v;
?>

Upvotes: 5

Views: 12861

Answers (1)

Sachin Tyagi
Sachin Tyagi

Reputation: 143

//I don't what error you are getting when i am testing your code its working perfectly you can also see
<?php
$id = 4;
$lang="de";
switch($id) {
  case 3:
    {
    switch((string)$lang) {
      case 'de':
        $v = 'Bern';
        break;
      case 'en':
        $v = 'Berne';
        break;
      default:
        $v = 'Berne';
      }
    }
    break;

  case 4:
    {
    switch($lang) {
      case 'de':
        $v = 'Zurich1';
        break;
      case 'en':
        $v = 'Zurich2';
        break;
      default:
        $v = 'Zurich3';
      }
    } 
    break;

  default:
    {
    switch($lang) {
      case 'de':
        $v = 'Genf';
        break;
      case 'en':
        $v = 'Geneva';
        break;
      default:
        $v = 'Genève';
      }
    }
    break;
}
echo $v;
?>

Upvotes: 2

Related Questions