Php Switch仅返回第一种情况

时间:2019-01-06 16:25:42

标签: php function switch-statement

我使用php开关实现了此功能,以便将二进制代码集转换为字母/数字。 当我在包含二进制代码的变量上回调函数时,它总是返回第一种情况。 有想法吗?

<?php

if (!function_exists('baudot')){
function baudot(){
        switch(true) {
        case '111000' : $decid= 'A';    break;
        case '110011' : $decid= 'B';    break;
        case '101110' : $decid= 'C';    break;
        case '110010' : $decid= 'D';    break;
        case '110000' : $decid= 'E';    break;
        case '110110' : $decid= 'F';    break;
        case '101011' : $decid= 'G';    break;
        case '100101' : $decid= 'H';    break;
        case '101100' : $decid= 'I';    break;
        case '111010' : $decid= 'J';    break;
        case '111110' : $decid= 'K';    break;
        case '101001' : $decid= 'L';    break;
        case '100111' : $decid= 'M';    break;
        case '100110' : $decid= 'N';    break;
        case '100011' : $decid= 'O';    break;
        case '101101' : $decid= 'P';    break;
        case '111101' : $decid= 'Q';    break;
        case '101010' : $decid= 'R';    break;
        case '110100' : $decid= 'S';    break;
        case '100001' : $decid= 'T';    break;
        case '111100' : $decid= 'U';    break;
        case '101111' : $decid= 'V';    break;
        case '111001' : $decid= 'W';    break;
        case '110111' : $decid= 'X';    break;
        case '110101' : $decid= 'Y';    break;
        case '110001' : $decid= 'Z';    break;
        case '100100' : $decid= ' ';    break;
        case '011000' : $decid= '-';    break;
        case '010111' : $decid= '/';    break;
        case '001101' : $decid= '0';    break;
        case '011101' : $decid= '1';    break;
        case '011001' : $decid= '2';    break;
        case '010000' : $decid= '3';    break;
        case '001010' : $decid= '4';    break;
        case '000001' : $decid= '5';    break;
        case '010101' : $decid= '6';    break;
        case '011100' : $decid= '7';    break;
        case '001100' : $decid= '8';    break;
        case '000011' : $decid= '9';    break;
        default:        $decid='NIL';
        }   
        return $decid;
}
}

$serid1='000011'; 
$serid2='110100'; 
echo baudot($serid1).'<br/>';  // should give 9
echo baudot($serid2);          // should give S
?>

2 个答案:

答案 0 :(得分:3)

这是因为您正在将每个值与布尔值true进行比较。第一个值是字符串111000。由于任何非空字符串都被认为是true,因此当PHP类型变戏法(因为您正在比较两种不同的数据类型)时,您的字符串就等于true。

您想要执行的操作是将其与一个值而不是布尔值true进行比较。因此,您需要在switch语句中使用它。这是通过将值作为参数传递给函数,然后在switch语句中使用它来实现的:

function baudot($value){
    switch($value) {

答案 1 :(得分:2)

使用开关盒时您错了。检查更新的代码。

您需要将id参数传递给函数,然后在切换时使用该参数。

<?php

function baudot(string $id){
        switch($id) {
          case '111000' : $decid= 'A';  break;
          case '110011' : $decid= 'B';  break;
          case '101110' : $decid= 'C';  break;
          case '110010' : $decid= 'D';  break;
          case '110000' : $decid= 'E';  break;
          case '110110' : $decid= 'F';  break;
          case '101011' : $decid= 'G';  break;
          default:        $decid='NIL';
        }   

        return $decid;
}


echo baudot('111000'); // Prints A