Function simulating if in php

0

Would it be possible to minimize or do a function that has the same function as this code below?

                        if($rank <= 50){ 
                            echo 'Descolorido';
                        }
                        else if($rank <= 100){ 
                            echo 'Azul Bebê';
                        }
                        else if($rank <= 200){ 
                            echo 'Roxo Bacon';
                        } 
                        else if($rank <= 300){ 
                            echo 'Verde ET';
                        } 
                        else if($rank <= 500){ 
                            echo 'Marrom Madeira';
                        } 
                        else if($rank <= 700){ 
                            echo 'Laranja Power';
                        } 
                        else if($rank <= 900){ 
                            echo 'Vermelho Killer';
                        } 
                        else if($rank <= 1500){ 
                            echo 'Rosa Piriguete';
                        } 
                        else if($rank <= 1700){ 
                            echo 'Amarelo Bobba';
                        } 
                        else if($rank <= 2000){ 
                            echo 'Turquesa Maravilha';
                        } 
                        else if($rank <= 2300){ 
                            echo 'Gótica Má';
                        } 
                        else if($rank <= 2500){ 
                            echo 'Ametista Destruidor';
                        } 
                        else if($rank <= 2700){ 
                            echo 'Esmeralda Divindade';
                        } 
                        else if($rank <= 3000){ 
                            echo 'Púrpura Star';
                        } 
                        else if($rank <= 3500){ 
                            echo 'Dourado Rei';
                        } 
                        else if($rank >= 3500){ 
                            echo 'Rainbow';
                        } 
    
asked by anonymous 30.05.2017 / 03:04

1 answer

2

Moving comparisons to a loop and mapping with a array of rules may be more readable:

function determineRank($input) {
    // valor retornado caso $input seja maior que todos os $ranks
    $default = 'Rainbow';
    $ranks = [
        50 => 'Descolorido',
        100 => 'Azul Bebê',
        200 => 'Roxo Bacon',
        300 => 'Verde ET',
        500 => 'Marrom Madeira',
        700 => 'Laranja Power',
        900 => 'Vermelho Killer',
        1500 => 'Rosa Piriguete',
        1700 => 'Amarelo Bobba',
        2000 => 'Turquesa Maravilha',
        2300 => 'Gótica Má',
        2500 => 'Ametista Destruidor',
        2700 => 'Esmeralda Divindade',
        3000 => 'Púrpura Star',
        3500 => 'Dourado Rei',
    ];

    foreach ($ranks as $rank => $value) {
        if ($input <= $rank) {
            return $value;
        }
    }

    return $default;
}

// Exemplo
$input = rand(45, 3600);
echo $input . ' - ' . determineRank($input) . PHP_EOL;

By default,

See running at 3v4l.org. At the end I made a loop to call the function 20 times with different values:

1873 - Turquesa Maravilha 
2440 - Ametista Destruidor 
1947 - Turquesa Maravilha 
1263 - Rosa Piriguete 
3344 - Dourado Rei 
2266 - Gótica Má 
516 - Laranja Power 
188 - Roxo Bacon 
2865 - Púrpura Star 
1052 - Rosa Piriguete 
2403 - Ametista Destruidor 
3118 - Dourado Rei 
2248 - Gótica Má 
2335 - Ametista Destruidor 
738 - Vermelho Killer 
1021 - Rosa Piriguete 
2026 - Gótica Má 
1733 - Turquesa Maravilha 
289 - Verde ET 
2094 - Gótica Má
    
30.05.2017 / 03:25