PHP:开关代码中的错误计算
序言:$state可以有3个可能的值: 10零,整数 2“设置级别:10%”字符串 3'设定水平:20%' 一串 我有一个开关代码,它没有返回正确的值 代码如下:PHP:开关代码中的错误计算,php,Php,序言:$state可以有3个可能的值: 10零,整数 2“设置级别:10%”字符串 3'设定水平:20%' 一串 我有一个开关代码,它没有返回正确的值 代码如下: <?php $state = 0; switch ($state) { case 'Set Level: 10 %': $return = 1; break; case 'Set Level: 20 %':
<?php
$state = 0;
switch ($state) {
case 'Set Level: 10 %':
$return = 1;
break;
case 'Set Level: 20 %':
$return = 2;
break;
default:
$return = 0;
break;
}
echo 'return:';
var_dump($return);
这是小提琴:
当$state=0时,它返回1而不是0,这是默认值。我也尝试过删除默认值并强制执行案例0:但没有更改
多谢各位
注意:$state也可以作为字符串。为此,我需要检查字符串。不能将int与字符串进行比较。在将$state发送到开关之前,请将其转换为字符串。这将为您提供正确的结果 $state = 0; switch((string)$state) ...
不能将int与字符串进行比较。在将$state发送到开关之前,请将其转换为字符串。这将为您提供正确的结果 $state = 0; switch((string)$state) ...
@MichaelBerkowski您如何知道OP不可能向交换机传递字符串?长话短说,PHP将字符串转换为整数,比较时结果为0。您的输入$state必须是字符串类型,以避免强制转换和不正确的比较。它不能是int。echo 0==任何字符串打印1。如果int 0是有效输入,为什么不将其转换为字符串,使其成为大小写,将其放在第一位,并且不依赖默认值?当然,您可以强制转换为字符串,并获得所需的结果:切换字符串$state。^^^^是。强制$state为字符串,然后再允许它进入交换机。这应该可以解决这个问题。@MichaelBerkowski您怎么知道OP不可能向交换机传递字符串?长话短说,PHP将字符串转换为整数,比较时结果为0。您的输入$state必须是字符串类型,以避免强制转换和不正确的比较。它不能是int。echo 0==任何字符串打印1。如果int 0是有效输入,为什么不将其转换为字符串,使其成为大小写,将其放在第一位,并且不依赖默认值?当然,您可以强制转换为字符串,并获得所需的结果:切换字符串$state。^^^^是。强制$state为字符串,然后再允许它进入交换机。这应该可以解决这个问题。