Перевод чисел из арабских в римские на php. Где ошибка?

Только начинаю изучать php. Нужно написать программу перевода арабских чисел в римские через условия и/или цикл. На выходе все равно возвращает арабскую, еще и ноль впереди ставит. На сайте видела решение через массив, но мне нужно именно массив не использовать. Заранее спасибо.

<?php

$number = 58;
    if ($number >= 4000 ) {
        echo "Ваше число слишком длинное. Римляне не использовали такие числа";
    } else {
        if ($number < 0) {
            $number = -$number;
        } 

            $x = floor($number / 1000);
            $a = floor($number / 100);
            $b = floor($number / 10) % 10;
            $c = $number % 10;

            switch ($c) {
            case 0:
                $c == "";
                break;
            case 1:
                $c == "I";
                break;
            case 2:
                $c == "II";
                break;
            case 3:
                $c == "III";
                break;
            case 4:
                $c == "IV";
                break;
            case 5:
                $c == "V";
                break;
            case 6:
                $c == "VI";
                break;
            case 7:
                $c == "VII";
                break;  
            case 8:
                $c == "VIII";
                break; 
            case 9:
                $c == "XI";
                break; 
        }

        if (!$b) {
            $b = "";
        } else {
            switch ($b) {
            case 0:
                $b == "";
                break;
            case 1:
                $b == "X";
                break;
            case 2:
                $b == "XX";
                break;
            case 3:
                $b == "XXX";
                break;
            case 4:
                $b == "XL";
                break;
            case 5:
                $b == "L";
                break;
            case 6:
                $b == "LX";
                break;
            case 7:
                $b == "LXX";
                break;  
            case 8:
                $b == "LXXX";
                break; 
            case 9:
                $b == "XC";
                break; 
        }
        if (!$a) {
            $a = "";
        } else {
            switch ($a) {
            case 0:
                $a == "";
                break;
            case 1:
                $a == "C";
                break;
            case 2:
                $a == "CC";
                break;
            case 3:
                $a == "CCC";
                break;
            case 4:
                $a == "CD";
                break;
            case 5:
                $a == "D";
                break;
            case 6:
                $a == "DC";
                break;
            case 7:
                $a == "DCC";
                break;  
            case 8:
                $a == "DCCC";
                break; 
            case 9:
                $a == "CM";
                break; 
        }

        if (!$x) {
            $x = "";
        } else {
            switch ($x) {
            case 0:
                $x == "";
                break;
            case 1:
                $x == "M";
                break;
            case 2:
                $x == "MM";
                break;
            case 3:
                $x == "MMM";
                break;
        }

}

}

}
echo $x . $a . $b . $c;
}



?>

Ответы (1 шт):

Автор решения: Максим Степанов

У вас везде оператор сравнения ==, а надо оператор присваивания = Также условные операторы вложены друг в друга и до проверки x, к примеру, в данном случае скрипт не доходит. Если расположить условные операторы друг под другом, получится нужный результат, по идее.

<?php

$number = 58;
if ($number >= 4000 ) {
    echo "Ваше число слишком длинное. Римляне не использовали такие числа";
} else {
    if ($number < 0) {
        $number = -$number;
    } 

    $x = floor($number / 1000);
    $a = floor($number / 100);
    $b = floor($number / 10) % 10;
    $c = $number % 10;

    switch ($c) {
        case 0:
            $c = "";
            break;
        case 1:
            $c = "I";
            break;
        case 2:
            $c = "II";
            break;
        case 3:
            $c = "III";
            break;
        case 4:
            $c = "IV";
            break;
        case 5:
            $c = "V";
            break;
        case 6:
            $c = "VI";
            break;
        case 7:
            $c = "VII";
            break;  
        case 8:
            $c = "VIII";
            break; 
        case 9:
            $c = "XI";
            break; 
    }

    if (!$b) {
        $b = "";
    } else {
        switch ($b) {
            case 0:
                $b = "";
                break;
            case 1:
                $b = "X";
                break;
            case 2:
                $b = "XX";
                break;
            case 3:
                $b = "XXX";
                break;
            case 4:
                $b = "XL";
                break;
            case 5:
                $b = "L";
                break;
            case 6:
                $b = "LX";
                break;
            case 7:
                $b = "LXX";
                break;  
            case 8:
                $b = "LXXX";
                break; 
            case 9:
                $b = "XC";
                break; 
        }
    }
    
    if (!$a) {
        $a = "";
    } else {
        switch ($a) {
            case 0:
                $a = "";
                break;
            case 1:
                $a = "C";
                break;
            case 2:
                $a = "CC";
                break;
            case 3:
                $a = "CCC";
                break;
            case 4:
                $a = "CD";
                break;
            case 5:
                $a = "D";
                break;
            case 6:
                $a = "DC";
                break;
            case 7:
                $a = "DCC";
                break;  
            case 8:
                $a = "DCCC";
                break; 
            case 9:
                $a = "CM";
                break; 
        }
    }

    if (!$x) {
        $x = "";
    } else {
        switch ($x) {
            case 0:
                $x = "h";
                break;
            case 1:
                $x = "M";
                break;
            case 2:
                $x = "MM";
                break;
            case 3:
                $x = "MMM";
                break;
        }
    }
}

echo $x . $a . $b . $c;

?>
→ Ссылка