Jump to content

[Resolvido] Verificar valor de variável


Recommended Posts

Posted

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? 😁

Posted

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

Posted

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

Posted

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
Posted (edited)

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
Posted

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

Posted

$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

Posted
$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.

Posted

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...

Posted (edited)

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
Posted

$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 --';
}
}

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.