Php Switch возвращает только первый случай - PullRequest
0 голосов
/ 06 января 2019

Я реализовал эту функцию с помощью переключателя 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 голосов
/ 06 января 2019

Это потому, что вы сравниваете каждое значение с логическим значением true. Первым значением является строка 111000. Поскольку любая непустая строка считается true, когда тип PHP манипулирует (потому что вы сравниваете два разных типа данных), ваша строка, которая имеет значение true, равна true.

Похоже, вы хотите сравнить это со значением, а не с логическим значением true. Поэтому вам нужно использовать это в вашем switch утверждении. Это достигается путем передачи значений в качестве параметра вашей функции и последующего использования в вашем выражении switch:

function baudot($value){
    switch($value) {
0 голосов
/ 06 января 2019

Вы ошиблись с использованием корпуса переключателя. Проверьте обновленный код.

Вам необходимо передать параметр 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
...