int=0上的php开关语句错误

int=0上的php开关语句错误,php,switch-statement,Php,Switch Statement,我在php开关案例中遇到问题 当我设置$number=0时,它应该首先运行案例,但这里的代码返回10-20K,这是第二个案例 我检查了比较运算符,在if-else情况下测试了它们,它们返回正确的值,但在这里第一个情况不在$number=0上运行 为什么会这样?PHP认为0是错误还是代码错误? 链接到代码板粘贴 这里还有代码 <?php $number = 0; switch ($number) { case ($number <= 10000):

我在php开关案例中遇到问题

当我设置$number=0时,它应该首先运行案例,但这里的代码返回10-20K,这是第二个案例

我检查了比较运算符,在if-else情况下测试了它们,它们返回正确的值,但在这里第一个情况不在$number=0上运行

为什么会这样?PHP认为0是错误还是代码错误?

链接到代码板粘贴

这里还有代码

<?php

$number = 0;

    switch ($number) {
     case ($number <= 10000):
            echo "0-10K";
           break;
        case ($number > 10000 && $number <= 20000):
            echo "10-20K";
            break;
        case ($number > 20000 && $number <= 30000):
            echo "20-30K";
            break;
        case ($number > 30000 && $number <= 40000):
            echo "30-40K";
            break;
        case ($number > 40000 && $number <= 50000):
            echo "40-50K";
            break;
        case ($number > 50000 && $number <= 60000):
            echo "50-60K";
            break;
        case ($number > 60000 && $number <= 70000):
            echo "60-70K";
            break;
        case ($number > 70000 && $number <= 80000):
            echo "70-80K";
            break;
        case ($number > 80000 && $number <= 90000):
            echo "80-90K";
            break;
        case ($number > 90000):
            echo "90K+";
            break;

        default: //default
            echo "N/A";
            break;
}

?>

当执行switch case方法时,不能与这样的布尔值进行匹配。您只需比较结果值

我认为你应该重写你的代码,使用
if…then…elseif
语句

if ($number <= 10000){
  echo "0-10K";
}elseif($number <= 20000){
  echo "10-20K";
}elseif($number <= 30000){
  echo "20-30K";
}elseif($number <= 40000){
  ...
}
如果($number您几乎在反向使用
开关,但不是完全相反。您需要通过写入
开关(true)
来完全反向:

两个重要注意事项:

  • 倒车
    开关
    在您第一次看到它时通常看起来非常不直观。如果您感觉不舒服,请不要使用它

  • 您的条件可以简化——假设它们按顺序出现,每个
    $number>X
    部分都是多余的,因为前一个条件中的检查(
    $number这里,如果$i等于0,PHP将执行所有echo语句

    因此,它执行下一个案例的语句,在这个案例中,它有一个中断

    因此,请使用if-else-if而不是开关盒

    if ($number <= 10000){
      echo "0-10K";
    }elseif(  $number <= 20000){
      echo "10-20K";
    }elseif(  $number <= 30000){
      echo "20-30K";
    }elseif(  $number <= 40000){
      echo "90K+";
    }
    
     ...
    
    elseif(  $number <= 90000)
         echo "80-90K";
    
    }elseif($number > 90000){
    echo "90K+";
    }
    

    如果($numberYes,对于PHP
    0
    FALSE
    (除非您使用
    ==
    )。是的,您的代码不正确-
    开关
    不用于比较范围-它用于比较值(至少在PHP、Ruby或Perl 6中是另一回事),就像这样

    switch ($letter) {
    case 'a':
        echo "A?";
        break;
    default:
        echo "Unknown letter";
        break;
    }
    
    在您的例子中,您将数字与条件进行比较-返回
    true
    false
    。因为
    0
    false
    ,第二个条件会捕捉到。
    开关
    不是为这样的代码设计的,我会使用
    if
    else
    ,或者重写您的逻辑-重复不是个好主意

    $range_number = floor($number / 1000);
    echo $range_number, $range_number ? "K" : "", "-", $range_number + 1, "K";
    

    (顺便说一句,我知道
    switch(true)
    有效,但不要使用它-这是一个丑陋的黑客行为)

    对于一个数字范围,你不能真正使用switch case。为此,请使用if(){}else{}

    $number = 0;
    var_dump($number); // int(0)
    

    如果将语句修改为
    case($number>0&&$number 9091&&$number 10000&&$number)没有必要进行这些额外的测试。如果我们已经达到第二个If语句,我们已经知道该值大于10000…@Lix我的意思是如果在开关中,如果存在0,则比所有情况都要大execute@hakra-首先感谢您的回答:)在开关中,如果有0,它将执行第二种情况,然后中断;因为在第一种情况下,它将检查$number(0作为false)=($number更简单?在我看来不是这样。代码更少-是的,但可读性受到影响。@Lix好吧,这只是个人喜好。@JagdeepSingh:因为有时候,一行不是描述性的,在3、4、5个月后,你根本不知道这段代码是做什么的。@MadaraUchiha-是的,但我认为这就是注释在程序中的用途正在使用的语言。
    
    if ($number <= 10000){
      echo "0-10K";
    }elseif(  $number <= 20000){
      echo "10-20K";
    }elseif(  $number <= 30000){
      echo "20-30K";
    }elseif(  $number <= 40000){
      echo "90K+";
    }
    
     ...
    
    elseif(  $number <= 90000)
         echo "80-90K";
    
    }elseif($number > 90000){
    echo "90K+";
    }
    
    switch ($letter) {
    case 'a':
        echo "A?";
        break;
    default:
        echo "Unknown letter";
        break;
    }
    
    $range_number = floor($number / 1000);
    echo $range_number, $range_number ? "K" : "", "-", $range_number + 1, "K";
    
    $number = 0;
    var_dump($number); // int(0)
    
    $number = 0;
    $jonskeet = false;
    
    switch ($number)
    {
        case ($jonskeet === true && $number <= 10000):
            echo "0-10K";
            // ...
    
    select ($user_rank)
    {
        case 0:
            return "guest";
            break;
        case 1:
            return "user";
            break;
        // ...
        default:
            return "unknown";
            break;
    }
    
    case ($number <= 10000):
        echo "0-10K";
        break;
    case ($number > 10000 && $number <= 20000):
        echo "10-20K";
        break;
    
    case TRUE:
        echo "0-10K";
        break;
    case FALSE:
        echo "10-20K";
        break;
    
     if ( $number < 10000 ) {
         echo "0-10K";
     } else if ( $number > 10000 && $number <= 20000 ) {
         echo "10-20K";
     // ...
     } else {
         echo "N/A";
     }