Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:开关代码中的错误计算_Php - Fatal编程技术网

PHP:开关代码中的错误计算

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 %':

序言:$state可以有3个可能的值:

10零,整数 2“设置级别:10%”字符串 3'设定水平: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为字符串,然后再允许它进入交换机。这应该可以解决这个问题。