Switch语句返回错误的结果

时间:2015-12-24 01:41:27

标签: php switch-statement

晕!我不知道我的switch语句中哪里出错了!这就是我希望我的代码要做的事情:

如果所有三个变量都是空的,那么我不想发生任何事情。但是,如果没有,那么我想看看哪些是空的,哪些不是,并根据它们的状态执行不同的任务。

如果它们不是空的,那么我想在变量之前添加一个字符串。如果他们是空的,那么我想添加一个字符串,说明" ..请提供信息"。

使用当前的硬编码变量,它应返回:

Dagger

但它返回:

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

4 个答案:

答案 0 :(得分:2)

您想要的行为可以通过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继续执行语句,直到switch块结束,或者第一次看到break语句。如果你没有在case语句列表的末尾写一个break语句,PHP将继续执行以下案件的陈述。

- http://php.net/manual/en/control-structures.switch.php

答案 1 :(得分:1)

这里有两个问题。 首先,正如评论中所指出的,您的switch语句没有任何break s。

其次,switch语句只能有1个结果。因此,一旦它找到第一个匹配,当$ 1为空或不为空时,它将结束语句。

在这种情况下,我只会使用一系列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);

    ?>

EDIT 在回答你的评论时,请在这里举一个简单的例子,如果你运行它,你会看到代码只是'首先'回声,即使所有三种情况都相同。

<?php
$a = 1;
switch ($a) {
    case 1:
        echo 'first';
        break;
    case 1:
        echo 'second';
        break;
    case 1:
        echo 'third';
        break;

}
?>

答案 2 :(得分:0)

你的语法错了 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;
}

还有一个问题?为什么使用布尔来切换值?

答案 3 :(得分:0)

你不能以这种方式使用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);

?>