光晕!我不确定我的switch语句哪里出错了!以下是我希望我的代码执行的操作:
如果这三个变量都是空的,那么我不希望发生任何事情。然而,如果不是,那么我想看看哪些是空的,哪些不是,并根据它们的状态执行不同的任务。
如果它们不为空,那么我想在变量之前添加一个字符串。如果它们是空的,那么我想添加一个字符串,说明"..请提供信息"。
对于当前的硬编码变量,它应该返回:
Airline Name: United
Flight Number: 262
Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT
但它返回:
Airline Name: PLEASE PROVIDE AIRLINE NAME
Flight Number: PLEASE PROVIDE FLIGHT NUMBER
Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT
代码:
$airline_name = "United";
$flight_number = 262;
$departure_airport = "";
function airport($one, $two, $three) {
if ($one =="" && $two =="" && $three =="") {
} else {
switch(true) {
case !empty($one):
$one = "Airline Name: $one<br>";
case empty($one):
$one = "Airline Name: PLEASE PROVIDE AIRLINE NAME<br>";
case !empty($two):
$two = "Flight Number: $two<br>";
case empty($two):
$two = "Flight Number: PLEASE PROVIDE FLIGHT NUMBER<br>";
case !empty($three):
$three = "Departure Airport: $three<br>";
case empty($three):
$three = "Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT<br>";
}
}
echo $one, $two, $three;
}
airport($airline_name,$flight_number,$departure_airport);
?>
您想要的行为可以用if else
或三元运算符来实现(这几乎只是编写if/else
的一种简单方法)。这是一个未经测试的粗略例子。
function airport($one, $two, $three) {
if ( !empty($one) || !empty($two) || !empty($three) ) {
$one = !empty($one) ? "Airline Name: $one<br>" :"Airline Name: PLEASE PROVIDE AIRLINE NAME<br>";
$two = !empty($two) ? "Flight Number: $two<br>" : "Flight Number: PLEASE PROVIDE FLIGHT NUMBER<br>";
$three = !empty($three) ? "Departure Airport: $three<br>" : "Departure Airport: PLEASE PROVIDE DEPARTURE AIRPORT<br>";
}
echo $one, $two, $three;
}
airport($airline_name,$flight_number,$departure_airport);
至于为什么你的switch
没有像你预期的那样运行,请参阅手册:
只有当case语句的值与switch表达式的值匹配时,PHP才会开始执行这些语句PHP继续执行这些语句,直到切换块结束,或者第一次看到break语句如果您没有在案例的语句列表末尾写一个break语句,PHP将继续执行下面案例的语句。
-http://php.net/manual/en/control-structures.switch.php
这里有两个问题。首先,正如评论中所指出的,您的switch语句没有任何break
s。
其次,switch语句只能有一个结果。因此,一旦它找到第一个匹配项(当$one为空或不为空时),它就会结束语句。
在这种情况下,我只使用一系列if
语句:
<?php
$airline_name = "United";
$flight_number = 262;
$departure_airport = "";
function airport($one, $two, $three) {
if(!empty($one)){
$one = "Airline Name: $one<br>";
} else {
$one = "Airline Name: PLEASE PROVIDE AIRLINE NAME<br>";
}
if(!empty($two)){
$two = "Flight Number: $two<br>";
} else {
$two = "Flight Number: PLEASE PROVIDE AIRLINE NAME<br>";
}
if(!empty($three)){
$three = "Departure Airport: $three<br>";
} else {
$three = "Departure Airport: PLEASE PROVIDE AIRLINE NAME<br>";
}
echo $one, $two, $three;
}
airport($airline_name,$flight_number,$departure_airport);
?>
编辑作为对您评论的回应,在这里举一个简单的例子,如果您运行它,您会看到代码只会"先"回显,即使这三种情况都相同。
<?php
$a = 1;
switch ($a) {
case 1:
echo 'first';
break;
case 1:
echo 'second';
break;
case 1:
echo 'third';
break;
}
?>
您的语法错误Switch语句如下。。。
switch ($some_var) {
case 'Peter': // if $some_var has value 'Peter'
# code... // this line executes if it is true, else breaks and loops through other cases until it finds right val
break;
default:
# code... // default code to be executed if case val isn't found
break;
}
还有一个问题?为什么使用布尔值来切换值?
您不能以这种方式使用switch语句,您现在所做的是遍历所有情况,而不管您的条件如何。例如,如果您将第一个情况与第二个情况交换,则输出将为"United"。这是因为你需要在每一个案例之后都加上突破,这样当找到正确的选择时,就可以打破循环。你可以使用if-else,看起来更简单、更小的
首先将默认值设置为空
<?php
$airline_name = "United";
$flight_number = 262;
$departure_airport = "";
function airport($one, $two, $three) {
if ($one =="" && $two =="" && $three =="") {
}
else
{
if ($one == '')
$one= "PLEASE PROVIDE AIRLINE NAME<br>";
if ($two == '')
$two= "PLEASE PROVIDE FLIGHT NUMBER<br>";
if ($three == '')
$three = "PLEASE PROVIDE DEPARTURE AIRPORT<br>";
$x1= "Airline Name: ".$one;
$x2= "Flight Number: ".$two;
$x3= "Departure Airport:".$three;
}
echo $x1, $x2, $x3;
}
airport($airline_name,$flight_number,$departure_airport);
?>