Php开关只返回第一种情况

Php开关只返回第一种情况,php,function,switch-statement,Php,Function,Switch Statement,我使用php开关实现了这个函数,以便将二进制代码集转换为字母/数字。 当我对包含二进制代码的变量回调函数时,它总是返回第一种情况。 有什么想法吗 <?php if (!function_exists('baudot')){ function baudot(){ switch(true) { case '111000' : $decid= 'A'; break; case '110011' : $decid= 'B'; break

我使用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
?>

您使用开关盒是错误的。检查更新的代码

您需要将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

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

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

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

您实际上没有解释为什么总是返回第一个结果。没有它,你就无法解释到底是怎么回事。你只需要给他们工作代码。我认为这有点“不言自明”,从我所说的,我认为他会足够聪明,理解我的代码和他的代码之间的区别,理解他需要函数中的参数,然后在开关盒中使用它。你的答案只是太多的信息,在这个简单的案例中,什么是真正不需要的。:)但这并不是不言自明的。类型杂耍并不明显,这是PHP中常见的陷阱,因此我们有这个问题。回答得好,John。解释得很好,伊姆霍。谢谢约翰的解释!这是有道理的。