我的老师给了我这个任务。
制作 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语句。
答案 0 :(得分:3)
了解您的switch语句正在将switch值与每个case语句中的表达式进行比较:
如果$day = 0
和case $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 Baker将开关比较($ 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';
}