Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Baia

[Resolvido] Verificar valor de variável

Mensagens Recomendadas

Baia

Boas,

Eu tenho uma variável e quero saber a que "casa" esse valor pertence. A variável pode ter p. ex. os seguintes valores: "-3" , "-1.5" , "-2,3" , "0" , "1" , "2.7" , "3,4" , "-", "--"

e quero tomar uma ação dependendo do valor, tipo isto:

if($variavel <= 0)
     $valor= "inferior ou igual a zero ";
elseif($variavel === 1)
     $valor= "igual a 1";
elseif($variavel >= 2)
     $valor= "maior ou igual a 2";
else
     $valor="O valor é - ou --";

Para mim o problema é que não sei que tipo de dados a variavel tem, tanto pode ser inteiro, como string etc, e não sei como comparar...

alguém pode ajudar? :cheesygrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
oxyzero

O PHP não se "importa" com os valores. Ou seja, ele "considera" 0 = "0". Mas atenção, são duas coisas diferentes. O primeiro é um número, o outro é um caracter.

Se quiseres verificar se os valores são iguais, fazes $variavel == 1; Se quiseres verificar se os valores e os seus tipos, fazes: $variavel === 1 (ou seja, aqui ele iria verificar se $variavel era um número e igual a 1.)

Mais info detalhada aqui: http://www.php.net/manual/pt_BR/language.operators.comparison.php

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
davidcorreia

Boas,

podes comparar strings com valores numéricos que o php faz a transformação, mas cuidado.

ex:

$a = '5';

$b = '10 metros';

$c = 'numero metros: 10';

$aux = $a + $b;

// $aux tem o valor 15 (int)

$aux2 = $b + $c;

//$aux2 tem o valor 10 (int)

o php começa no inicio da string e apartir do momento que nao concegue converter em inteiro descarta o resto da string.

em relação a comparação em si...

'==' é diferente de '===', o primeiro verifica apenas o conteudo enquanto o 2º verifica o conteudo e tipo.

ex:

$a = 1; //int

$b= '1'; //string

$a == $b // true

$a === $b // false

PS: em relação aos valores conterem ponto ou virgula é não é igual!!! Com ponto o numero será transformado em float, com o conteudo de origem, mas com virgula, perder-se-á as casas decimais.

espero que tenha ajudado,

Abraco

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baia

Obrigado pelas respostas eu inicialmente estava a comparar por tipo, por isso só conseguia comparar os inteiros, mas alerei para comparar por conteúdo

assim quando a variável contém números funciona perfeitamente


$variavel="2.4";

if($variavel < "1")
     $valor= "inferior ou dentro de zero ";
elseif($variavel >= "1" && $variavel < "2")
     $valor= "igual ou dentro de 1";
elseif($variavel >= "2")
     $valor= "igual ou maior que 2";
else
     $valor="O valor é - ou --";

//neste caso  o valor da variável é igual ou maior que 2

mas quando o valor da variável é "-" ou "--" assume como inferior ou dentro de 0 e deveria de assumir a última opção


$variavel="-";

if($variavel < "1")
     $valor= "inferior ou dentro de zero ";
elseif($variavel >= "1" && $variavel < "2")
     $valor= "igual ou dentro de 1";
elseif($variavel >= "2")
     $valor= "igual ou maior que 2";
else
     $valor="O valor é - ou --";

//neste caso retorna o valor da variável é inferior ou dentro de zero

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
davidcorreia

coloca o primeiro if assim:

if($variavel < "1" && $variavel != 0)

tens depois o problema se o valor realmente for zero :\

alias, comparas $variavel === '0' echo "something";

Editado por davidcorreia

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baia

coloca o primeiro if assim:

if($variavel < "1" && $variavel != 0)

tens depois o problema se o valor realmente for zero :\

com este if ele nao valida os valores negativos, não assume por exemplo -3

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
davidcorreia

$variavel="-3";

if ($variavel === '0')

$valor = "é zero";

if($variavel < "1" && $variavel != 0)

$valor= "inferior a um e diferente de zero ";

elseif($variavel >= "1" && $variavel < "2")

$valor= "igual ou dentro de 1";

elseif($variavel >= "2")

$valor= "igual ou maior que 2";

else

$valor="O valor é - ou --";

// output inferior a um e diferente de zero

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
oxyzero

$variavel="-2.3";

if (is_numeric($variavel)){
if($variavel < "1")
    $valor= "inferior ou dentro de zero ";
elseif($variavel >= "1" && $variavel < "2")
    $valor= "igual ou dentro de 1";
elseif($variavel >= "2")
    $valor= "igual ou maior que 2";
}else
    $valor="O valor é - ou --";

echo $valor;

Atenção que não funciona com vírgulas, tem de ser com ponto.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baia

estive a fazer vários testes com as ideias que foram colocadas e havia sempre algum que "escapava"

a forma que consegui de por isto a funcionar foi esta

$valor="";
$variavel="--";

if ($variavel === "0")
  $valor = "inferior ou igual a zero ";
if($variavel < "1" && $variavel != 0)
  $valor= "inferior ou igual a zero ";
if($variavel >= "1" && $variavel < "2")
  $valor= "igual ou dentro de 1";
if($variavel >= "2")
  $valor= "igual ou maior que 2";
if(empty($valor))
     $valor="O valor é - ou --";

se alguém tiver mais ideias...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

if ($var == "-" || $var == "--") {
echo "- or --";
} else if (!is_numeric($var)) {
echo "is not a number";
} else if ($var < 1) {
echo "less then 1";
} else if ($var <= 2) {
echo "between 1 ans 2";
} else {
echo "greater then 2";
}
[/Code]

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

$variaveis = array(
'2.4',
'0.9',
'2',
'-',
'--',
'-2',
'-0.3'
);
foreach ($variaveis as $var)
{
$valor = '';

if (preg_match('/^-?(?:\d+|\d*\.\d+)$/', $var))
{
 $var = (int) $var;

 if ($var < 1)
 {
  $valor = 'inferior ou dentro de zero';
 }
 elseif ($var >= 1 && $var < 2)
 {
  $valor = 'igual ou dentro de um';
 }
 else
 {
  $valor = 'igual ou maior que dois';
 }
}
else
{
 $valor = 'o valor é - ou --';
}
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.