Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcelo Lopes de Oliveira

[Resolvido] AJUDA COM WHILE

Recommended Posts

Tenho um código simples, que deve efetuar uma ação caso um campo seja <= a outro. 

Nessa primeira opção funciona perfeitamente, porém caso não atenda a essa condição nada é exibido na tela.

Alguém pode me apontar o erro?

Segue o código:

<?php
        $in = isset($_GET["inicio"])?$_GET["inicio"]:0;
        $fi = isset($_GET["final"])?$_GET["final"]:0;
        $inc = isset($_GET["incremento"])?$_GET["incremento"]:0;
        echo " O inicio é $in, o final $fi e o incremento $inc </br>";
        if($in <= $fi) {
            while ($in <= $fi) {
            echo $in. "</br>";
            $in = $in + $inc;
            }
        }
        else {
            while ($fi > $in) {
            echo $fi. "</br>";
            $fi = $fi - $inc;     
                 }
            }
?>

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Marcelo Lopes de Oliveira.

 

O problema é que a expressão do seu segundo while está incorreto mesmo.

 

Exemplo:

inicio = 10

fim = 3

incremento = 1

 

Você deveria aplicar a mesma lógica do primeiro while, utilizando a variável inicio como passo inicial, mas no seu código, você está utilizando a variável fim, que seria 3.

Se juntarmos o seu código, com o meu exemplo, o while iria se perguntar: 3 é MAIOR que 10? NÃO, então não faça nada.

 

O segundo while deveria ser assim:

while ( $in >= $fi ) {
    echo $in . "<br>";
    $in = $in - $inc;
}

 

 

Dito isso, resolvi otimizar seu código para lhe ajudar nos seus estudos, pois ao que me parece, este é um código puramente para fins de aprendizado. Espero que te ajude (leia os comentários):

<?php
/**
 * O operador NULL-coalesce é uma novidade do PHP 7.0.
 * Ele serve exatamente para o mesmo propósito do seu código anterior,
 * mas é mais legível e curto.
 *
 * Exemplo:
 * isset( $_GET[ 'xxx' ] ) ? $_GET[ 'xxx' ] : 0
 *
 * É exatamente o mesmo que:
 * $_GET[ 'xxx' ] ?? 0
 *
 * A função intval() ao redor da expressão é apenas para garantirmos que o valor é um inteiro.
 * Isso é uma boa prática e deve ser feito sempre que um valor inteiro
 * se origina do usuário, como via GET e POST.
 * (Se ele informar algo como 'bla bla bla', o PHP converte para 0 automaticamente).
 *
 * Observe também que alterei o nome das variáveis. $ini e $fi não representam seu real propósito.
 */
$inicio = intval( $_GET[ 'inicio' ] ?? 0 );
$final = intval( $_GET[ 'final' ] ?? 0 );
$passo = intval( $_GET[ 'incremento' ] ?? 0 );

/**
 * Não precisávamos do segundo while.
 * Basta resolvermos isso matematicamente. O "incremento"
 * pode ser um decremento se alterarmos seu sinal.
 * Por isso alterei a variável $incremento para $passo.
 */
if ( $inicio > $final ) {
    $passo = $passo * -1;//10 > 3, certo? Então devemos decrementar
}

/**
 * É melhor colocarmos variáveis em volta de { },
 * quando inseridas dentro de strings.
 */
echo "O inicio é {$inicio}, o final {$final} e o incremento {$passo}.<br>";

/**
 * Alteramos a expressão de condição conforme a necessidade.
 */
while ( $passo >= 0 ? $inicio <= $final : $inicio >= $final ) {
    echo $inicio . '</br>';
    $inicio += $passo;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.