我的老师给了我这个任务。
创建一个int变量,表示一周中的某一天(1-7)。用以下情况做一个开关语句:
echo "Weekday";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选项。
我知道有更好的方法来做到这一点,但我需要做它只有一个开关语句。
发布于 2016-03-25 21:10:04
请理解,开关语句是将开关值与每个case语句中的表达式进行比较:
如果$day = 0和case $day >= 1 && $day <= 5:的$day >= 1 && $day <= 5为false,而$day (从开关值)松散类型比较为false,则此表达式的计算结果为true.然后被处决。
开关/大小写并不是一系列美化的if/elseif/else语句.它是定义的开关值与case语句的比较。
编辑
至于你的第二次尝试:
case 1-5是1减去5 = -4
发布于 2016-03-25 20:58:51
可以将具有属于同一值的case语句堆栈起来。下面是一个片段:
case 6:
case 7:
echo "Weekend";
break;发布于 2016-03-25 21:30:22
虽然为此,我将使用如果哪个更好的开关假空将等于0,它也很难与1相比,因为它不是严格的,它被称为松散压实
带开关的代码:
<?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';
}Ask @Mark写了开关比较($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';
}https://stackoverflow.com/questions/36227820
复制相似问题