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