1
resposta

Minha solução do IMC usando o novo recurso do PHP match

Arredondando o float e usando o match ao invés dos ifs. Segue o código:

<?php
$altura = 1.80;
$peso = 78;
$resultado = $peso / $altura ** 2;

echo "Seu IMC é: " . number_format($resultado, 2, '.', '') . PHP_EOL; // Formatando para deixar somente 2 casas decimais

$resultado_view = match (true) {
    $resultado <= 18.4 => 'Classificação: Magreza  |  Grau de Obesidade 0',
    $resultado <= 18.5 || $resultado <= 24.9 => 'Classificação: Normal  |  Grau de Obesidade 0',
    $resultado <= 25.0 || $resultado <= 29.9 => 'Classificação: Sobrepeso  |  Grau de Obesidade I',
    $resultado <= 30.0 || $resultado <= 39.9 => 'Classificação: Obesidade  |  Grau de Obesidade II',
    $resultado > 40.0 => 'Classificação: Obesidade Grave  |  Grau de Obesidade III',
    default => 'Insira o valor correto',
};

echo $resultado_view; // Exibindo resultado com a mensagem de acordo com o IMC
1 resposta

Olá, Jose, tudo bem?

Gostaria de te parabenizar pois o seu código está bem organizado e a utilização do novo recurso match do PHP ficou bem interessante. Além disso, a formatação do número do IMC ficou ótima.

Só tenho uma sugestão: em algumas condições do match, você utilizou dois sinais de menor ou igual <= em vez de apenas um. Também daria certo se você utilizasse apenas 1 sinal de menor ou igual para um único valor, da seguinte maneira:

$resultado_view = match (true) {
    $resultado <= 18.4 => 'Classificação: Magreza  |  Grau de Obesidade 0',
    $resultado <= 24.9 => 'Classificação: Normal  |  Grau de Obesidade 0',
    $resultado <= 29.9 => 'Classificação: Sobrepeso  |  Grau de Obesidade I',
    $resultado <= 39.9 => 'Classificação: Obesidade  |  Grau de Obesidade II',
    $resultado > 40.0 => 'Classificação: Obesidade Grave  |  Grau de Obesidade III',
    default => 'Insira o valor correto',
};

Bons estudos :)

Espero ter ajudado e bons estudos!