PHP中的范围切换

时间:2016-03-25 20:50:57

标签: php switch-statement range

我的老师给了我这个任务。

  

制作 int 变量,表示星期几(1-7)。使用以下情况制作一个switch语句:

     
      
  • 1-5 echo "Weekday";
  •   
  • 6-7 echo "Weekend";
  •   
  • 其他值echo "Unknown day";
  •   

我的问题是零。

起初我写了这段代码。

$day = 7;

switch ($day) {
    case $day >= 1 && $day <= 5:
        echo "Weekday";
        break;

    case $day >= 6 && $day <= 7:
        echo "Weekend";
        break;

    default:
        echo "Unknown day";
        break;
}

它适用于除0之外的每个数字。$day = 0;选择第一个案例并说它是工作日

我也试过了。

$day = 7;

switch ($day) {
    case 1-5:
        echo "Weekday";
        break;

    case 6-7:
        echo "Weekend";
        break;

    default:
        echo "Unknown day";
        break;
}

但情况更糟。我总是得到default选项。

我知道有更好的方法可以做到这一点,但我只需要使用switch语句。

3 个答案:

答案 0 :(得分:3)

了解您的switch语句正在将switch值与每个case语句中的表达式进行比较:

如果$day = 0case $day >= 1 && $day <= 5:然后$day >= 1 && $day <= 5为false且$day(来自切换值),loose-type将比较为false,因此此表达式的计算结果为true。 ..并且被执行。

switch / case不是if / elseif / else语句的美化系列.....它定义的switch值和case语句之间的比较

修改

关于你的第二次尝试:

case 1-5 1减去5 = -4

答案 1 :(得分:2)

您可以堆叠具有属于一起的值的case语句。这是一个片段:

alias: {
    'react': path.join(__dirname, 'node_modules', 'react')
},

答案 2 :(得分:1)

虽然对于这个我会使用if哪个更好的切换假nulll将等于0也难以与1比较因为它不严格它被称为loose comprasion

带开关的代码:

<?php

$day = 0;

switch ($day) {
    case 1: // if you put as day anything but 0, false, null it will go to true
    case 2:
    case 3:
    case 4:
    case 5:
      echo 'weekday';
      break;
    case 6:
    case 7:
      echo 'weekend';
      break;
    default:
      echo 'unknown';  
}

请求@Mark Ba​​ker将开关比较($ day)与每个案例值进行比较,以便比较表达式条件的结果:

 if ($day == 1-5) // 0 == -4 
 elseif ($day == 6-7) // 0 == -1
 else

如果你做switch(true)它可以工作,但它没有多大意义,下面的代码:

<?php

$day = 7;

switch (true) { 
    case $day > 0 && $day < 6: 
      echo 'weekday';
      break;
    case $day === 6 || $day === 7 :
      echo 'weekend';
      break;
    default:
      echo 'unknown';
}