我有以下代码:
$days = 0;
$daysLastChar = mb_substr($days, -1);
switch ($daysLastChar) {
case in_array($daysLastChar, Array("1")): {
$correctDaysForm = "день";
break;
}
case in_array($daysLastChar, Array("2", "3", "4")): {
$correctDaysForm = "дня";
break;
}
case in_array($daysLastChar, Array("5", "6", "7", "8", "9", "0")): {
$correctDaysForm = "дней";
break;
}
}
第一种情况布尔值in_array($daysLastChar, Array("1"))
表达式求值为FALSE
但流程进入此案例并将$correctDaysForm
变量设置为不正确的第一个值。为什么这样?如果天数以零以外的数字结束,则不会发生这种情况。
答案 0 :(得分:5)
这是不您如何使用switch
语句。 switch
将($daysLastChar
)中传递的值与每个case语句的值进行匹配。
所以,它正在尝试$daysLastChar == in_array($daysLastChar, Array("1"))
(依此类推)。 in_array
返回一个布尔值,$daysLastChar
(我假设)是一个int。所以,你可以看到它与你期望它的陈述不匹配。
switch
使用“松散比较”(意味着它使用==
代替===
)。因此,如果$daysLastChar
为0
,那么它将匹配第一个案例,因为in_array
返回false
,其{em>值与{{1}相同}}
执行此操作的一种方法是使用0
。因此,它会将switch(true)
与每个语句进行比较,以查看哪些匹配。或者,您可以将其转换为true
/ if
。
答案 1 :(得分:1)
您正在启用$daysLastChar
。因此,如果in_array($daysLastChar, Array("1"))
评估为$daysLastChar
,则执行该案例。