可以使用switch语句在PHP中比较字符串吗?

可以使用switch语句在PHP中比较字符串吗?,php,nested,switch-statement,string-comparison,Php,Nested,Switch Statement,String Comparison,我试图编写一些PHP代码来返回基于两个参数的翻译:一个整数翻译id和一个两个字母的语言代码 为此,我嵌套了switch语句。外部开关工作正常,但内部开关失败,并且始终返回它们的默认值,以$lang参数采用的值为准。在下面的示例中,$lang=“de”时返回“Berne” 我检查了$lang的值是否正确;是的。 将$lang强制转换为(字符串),以确保其类型正确。 尝试将内部开关括在括号之间,并用双引号代替简单引号。没有成功。这是我的密码: //我不知道在测试代码时您会遇到什么错误,您也可以看到

我试图编写一些PHP代码来返回基于两个参数的翻译:一个整数翻译id和一个两个字母的语言代码

为此,我嵌套了switch语句。外部开关工作正常,但内部开关失败,并且始终返回它们的默认值,以$lang参数采用的值为准。在下面的示例中,$lang=“de”时返回“Berne”

我检查了$lang的值是否正确;是的。 将$lang强制转换为(字符串),以确保其类型正确。 尝试将内部开关括在括号之间,并用双引号代替简单引号。没有成功。这是我的密码:


//我不知道在测试代码时您会遇到什么错误,您也可以看到它工作得很好

Put
var\u dump($lang);变量转储($lang=='de')在两者之后
$v='Berne'并再次检查。您最好
echo mb\u detect\u encoding($lang)
以确保其编码正确,并且您可能还需要
trim($lang)
。谢谢。问题不在于代码本身,而在于它被用作具有服务器端缓存机制的MODx内容管理系统的一个片段。因此,代码返回的值与第一次调用的值相同。我将代码片段取消缓存,这样就解决了问题。谢谢。我意识到代码工作得很好。问题在于,我将其用作具有服务器端缓存机制的MODx内容管理系统的一个片段。该片段本身是从另一个片段使用的块(=子模板)调用的。我反转了两个代码段的缓存/非缓存状态,这就解决了问题。
//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;
?>