这样的页面:PHP switch case $_GET's variables and switch case $_GET's variable's values和其他人有帮助,但我不知道为什么我的交换机声明不起作用。
用户可能会被index.php?class=className&badge=badgeName
或index.php?class=className
或index.php?badge=badgeName
或仅仅是普通的index.php
此代码可以正常使用
if ($_GET["badge"] && $_GET["class"]) {
echo 'Badge and Class';
} elseif ($_GET["badge"] && !$_GET["class"]) {
echo 'Badge only';
} elseif (!$_GET["badge"] && $_GET["class"]) {
echo 'Class only';
} else {
echo 'No variables';
}
但是我试图用switch语句进行简化,除了默认情况外,一切正常:
switch ($_GET) {
case $_GET["badge"] && $_GET["class"]:
echo 'Badge and Class';
break;
case $_GET["badge"] && !$_GET["class"]:
echo 'Badge Only';
break;
case !$_GET["badge"] && $_GET["class"]:
echo 'Class only';
break;
default:
echo "No badge or class";
}
任何帮助表示感谢。
答案 0 :(得分:2)
您可以尝试这样的事情:
switch (true) {
case ($i ==0):
echo '$i ==0';
break;
case ($i < 1):
echo '$i < 1';
break;
case ($i > 1):
echo '$i > 1';
break;
}
对于你的情况:
switch (true) {
case ($_GET["badge"] && $_GET["class"]):
echo 'Badge and Class';
break;
case ($_GET["badge"] && !$_GET["class"]):
echo 'Badge Only';
break;
case (!$_GET["badge"] && $_GET["class"]):
echo 'Class only';
break;
default:
echo "No badge or class";
}
答案 1 :(得分:0)
我认为你误解了switch()语句。这是if ... else if的特殊情况,如果将单个变量与一组可能的值进行比较,则为else。您不能在case
语句中包含条件(求值为布尔值的表达式)。有关示例,请参阅http://www.php.net/manual/en/control-structures.switch.php。
编辑: 我必须花一点时间来反对滥用switch语句,如下所示:
$a=1;
$b=2;
switch(true) {
case ($a==1):
echo "first test passed";
break;
case ($b==2):
echo "second test passed";
break;
}
这比较&#34; true&#34;到下面表达式的每个布尔结果。两个条件都为真,第一个条件执行,break;
语句跳过第二个条件。技术上功能齐全,极具误导性,我扼杀了那些给我留下这段代码进行调试的人。绝对可恶的做法。相反,如果你打开一个像($ a)或($ a -3)的值,你的case语句包含比较值,如5和7,或&#34; A&#34;和&#34; B&#34;,一个好的IDE会警告你有重复的案例陈述。您可以确定其中一个case语句通过了比较。而将来维护您的代码的人不必追捕或诅咒您的名字。请不要这样使用switch()。如果您需要这样做,请使用if ... else if ...以便于阅读。通过这种方式,显然必须按顺序检查测试,并且执行流程将是透明的。
答案 2 :(得分:0)
答案在你给出的链接中:
您必须将开关括在foreach()循环中。
$_GET
只是一个数组,因此您必须按照链接中的建议对其进行for-each循环
foreach ($_GET as $key => $value) {
// Switch goes here
}
然后在这个for-each里面你可以切换,你可以使用$key
的值。
你将如何解决这个问题,我现在还没想到......
[编辑] 我会坚持使用if-elseif版本 - 如果你只有这两个值来检查:)