奇怪的PHP字符串比较效果,这能做得更好吗?

奇怪的PHP字符串比较效果,这能做得更好吗?,php,string,compare,Php,String,Compare,我更新了一个网站,在我的页面中发现了一个恼人的问题 我解决了这个问题,但我并不确信它应该是这样的。 对我来说,我不是一个PHP专家,它的奇怪行为能不能有人解释一下发生了什么 我有这个密码: if($Menu == "index"){ {if ($Language == "UK"){echo "<td><h1>Welcome</h1>";} {if ($Language == "NL"){echo "<td><h1>Welko

我更新了一个网站,在我的页面中发现了一个恼人的问题 我解决了这个问题,但我并不确信它应该是这样的。 对我来说,我不是一个PHP专家,它的奇怪行为能不能有人解释一下发生了什么

我有这个密码:

if($Menu == "index"){
   {if ($Language == "UK"){echo "<td><h1>Welcome</h1>";}
   {if ($Language == "NL"){echo "<td><h1>Welkom </h1>";}
   }
  else
   // if $menu was not index it displayed a hyperlink to Welcome page
这导致jut在页面上显示单词索引。所以可能字符串类型会出错或者类似的事情

所以我尝试了

  if($Menu === "index") 
不走运

我终于这样解决了

  if (strpos($Menu,'index' !==false)
这真的是应该做的吗??,我觉得不太舒服。 对我来说,奇怪的是,对于$Language来说,它只是按照它应该的方式工作(在我看来)。
这里是否存在某些类型问题,或者可能是不需要的结尾\n我是否可以使用ehm规范化字符串以执行可读字符串比较的内容,或者使用不同类型的相等运算符。我觉得$Menu更容易处理。可能是重新格式化或,但我在这里不确定。

看起来您的索引字符串确实包含空格,而不是strpo,您可以使用
trim($Menu)
删除它们

但最好是防止它们的发生。您可以尝试
echo“dump Menu variable |”$菜单
或仅
var\u dump($Menu)
来识别附加字符

也许你可以把你的代码段贴在$Menu里


(对不起,不能只是评论)

你可以试试这样的东西

$Menu = trim($Menu);
$Language = trim($Language);

$langAllowed = ["UK", "NL"]; // zero element is default;
if(!in_array($Language, $langAllowed )) $Language = $langAllowed[0];

$menuLocales=[
    "index" => [
        "UK"=>"Welcome",
        "NL"=>"Welkom "
    ],
    "default"=>[
        "UK"=>"Welcome default (no index)",
        "NL"=>"Welkom default (no index)"
    ]
];

$MenuIndex = isset($menuLocales[ $Menu ]) ? $Menu : "default";
echo "<td><h1>".$menuLocales[ $MenuIndex ][ $Language  ]."</h1>";
$Menu=修剪($Menu);
$Language=trim($Language);
$langAllowed=[“英国”、“荷兰”];//默认为零元素;
如果(!in_数组($Language,$langAllowed))$Language=$langAllowed[0];
$menuLocales=[
“索引”=>[
“英国”=>“欢迎”,
“NL”=>“Welkom”
],
“默认值”=>[
“UK”=>“欢迎默认值(无索引)”,
“NL”=>“Welkom默认值(无索引)”
]
];
$MenuIndex=isset($MENULUCALES[$Menu])$菜单:“默认”;
echo“$menuLocales[$MenuIndex][$Language]”;

是的,这是其中奇怪的部分,因为$language可以工作。但是$Menu没有,除非我使用strpos技巧,我想知道我是否可以重写代码,来“规范化”$Menu。也许你的$Menu变量中有一个空格,试试这个比较:如果($Menu==trim(“index”){}谢谢,$Menu中确实有一个空格,这是代码前面的字符串操作的结果。使用var_dump解决了这个问题。谢谢
$Menu = trim($Menu);
$Language = trim($Language);

$langAllowed = ["UK", "NL"]; // zero element is default;
if(!in_array($Language, $langAllowed )) $Language = $langAllowed[0];

$menuLocales=[
    "index" => [
        "UK"=>"Welcome",
        "NL"=>"Welkom "
    ],
    "default"=>[
        "UK"=>"Welcome default (no index)",
        "NL"=>"Welkom default (no index)"
    ]
];

$MenuIndex = isset($menuLocales[ $Menu ]) ? $Menu : "default";
echo "<td><h1>".$menuLocales[ $MenuIndex ][ $Language  ]."</h1>";