Jump to content
Baia

[Resolvido] Verificar valor de variável

Recommended Posts

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:

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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";

Edited by davidcorreia

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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]

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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 --';
}
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.