0
echo empty($location);
switch($location){
    case (empty($location)):
expression 1;
    break;
    case ($location%10000==0):
expression 2;
    break;
    case ($location%100==0):
expression 3;
    break;
    default:
    expression 4;
    break;

}

当我 echo empty($location) 时,它打印出 1,为什么没有执行表达式 1?

4

3 回答 3

1

您没有正确使用 switch 语句。它们的工作方式是将每个案例值与初始switch值进行比较。

在你的情况下,让我们假装$location = null

echo empty($location);    // true: null is considered empty.

switch ($location) {
    case empty($location) :    // this performs the check:
                               // $location == empty($location)
                               //      null == true ==> false

所以这就是为什么它不运行..

if .. else在这种情况下,我建议坚持。

于 2009-12-13T04:49:13.067 回答
0

empty函数返回一个布尔值 1 或 0 http://uk3.php.net/empty

switch / case语句检查变量是否具有某个值并根据该值执行表达式

在您的情况下,如果(您在键入时有效地要求)expression 1的值应执行,$location==1switch($location)

所以你上面代码的逻辑是:

如果 $location==1,执行表达式 1
如果 $location%10000==0,执行表达式 2
等等。

的价值是$location==1

于 2009-12-13T04:48:51.803 回答
0

switch陈述与陈述不同if/else。Switch 语句正在寻找特定的值。如果它找到给定case语句中指定的值,它将运行该case语句之后的代码。

以下代码:

switch($x)
    case 1:
        // some stuff
        break;
    case 2:
        // some other stuff
        break;
    default:
        // some more stuff
        break;

相当于这段代码:

if($x == 1){
    // some stuff
}
elseif($x == 2){
    // some other stuff
}
else{
    // some more stuff
}

基本上,switch语句是if/elseif/else块的快捷方式,您可以在其中检查单个变量与一堆可能性的相等性。

由于empty()返回 0 或 1,如果为 1(如果为空)或 0(如果不为空),您的第一个case将运行。这几乎就像你写了以下内容:$location$location$location

elseif($location == empty($location)){ ...

说得通?您可能需要以下内容,而不是使用switch语句:

if(empty($location)){
    // ...
}
elseif($location % 10000 == 0){
    // ...
}
// ...
于 2009-12-13T05:02:08.357 回答