2014-11-06 65 views
0

我已经更新了一个网站,并在我的网页 中发现了一个令人讨厌的问题,但我并不确信它应该看起来像这样。 对我而言,我不是一个PHP专家,它的奇怪行为可能会有人解释我发生了什么事情。奇怪的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 

串的事情在这里,而对语言的检查工作的罚款。 为$菜单比较没有工作,即使它包含单词指数 由于在飞行中产生的整个页面,并在那里 之前做了一些字符串操作我认为也许,尽管我也

echo "dump Menu variable " . $Menu 
测试它

这导致jut在页面上显示单词索引。因此,也许有会去一些错误的字符串类型或类似的东西

所以我尝试用

if($Menu === "index") 

没有运气

嗯,我终于解决它像这样

if (strpos($Menu,'index' !==false) 

是这真的是它应该完成的方式???,我不觉得它真的很舒服。 对我而言,奇怪的是,对于$语言来说,它就像它应该的那样工作(在我看来)。 这里是否存在某种类型的问题,或者可能是不需要的结尾\ n我可能会将字符串标准化为执行可读字符串比较或不同类型的相同运算符的内容。正如我觉得$菜单可以更容易地处理。也许重新格式化或但我不确定在这里。

+0

是和那它的奇怪的一部分,因为$语言的作品。但$菜单没有,除非我使用strpos技巧,我不知道我是否可以重写代码,以ahum“正常化”$菜单左右。 – user613326 2014-11-06 10:24:32

+0

也许你在你的$ Menu变量中有一个空格,试试这个比较:if($ Menu == trim(“index”)){} – 2014-11-06 10:25:06

回答

1

看起来确实像您的索引 - 字符串包含空格,而不是strpos,您可以使用trim($Menu)来摆脱它们。

但最好的办法是防止它们的发生。您可以尝试echo "dump Menu variable |" . $Menu ."|";或只是var_dump($Menu)来识别其他字符。

也许你可以发布,你的代码段$菜单填充。

(抱歉,不能只是评论)

+0

谢谢,的确,$ Menu中有一个空格,由于字符串在代码中的早期操作。使用var_dump解决了它。谢谢 – user613326 2014-11-06 10:33:02

0

你可以尝试这样的事情

$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>";