Baia Posted August 16, 2013 at 09:48 PM Report #521904 Posted August 16, 2013 at 09:48 PM 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? 😁
oxyzero Posted August 16, 2013 at 10:07 PM Report #521906 Posted August 16, 2013 at 10:07 PM 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
yoda Posted August 16, 2013 at 10:18 PM Report #521908 Posted August 16, 2013 at 10:18 PM Se deres casos concretos de validação, podemos ajudar mais. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
davidcorreia Posted August 16, 2013 at 10:21 PM Report #521909 Posted August 16, 2013 at 10:21 PM 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
Baia Posted August 16, 2013 at 10:30 PM Author Report #521911 Posted August 16, 2013 at 10:30 PM 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
davidcorreia Posted August 16, 2013 at 10:40 PM Report #521912 Posted August 16, 2013 at 10:40 PM (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 August 16, 2013 at 10:44 PM by davidcorreia
Baia Posted August 16, 2013 at 10:44 PM Author Report #521913 Posted August 16, 2013 at 10:44 PM 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
davidcorreia Posted August 16, 2013 at 10:58 PM Report #521915 Posted August 16, 2013 at 10:58 PM $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
oxyzero Posted August 16, 2013 at 11:01 PM Report #521916 Posted August 16, 2013 at 11:01 PM $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.
Baia Posted August 16, 2013 at 11:08 PM Author Report #521917 Posted August 16, 2013 at 11:08 PM 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...
HappyHippyHippo Posted August 16, 2013 at 11:39 PM Report #521919 Posted August 16, 2013 at 11:39 PM (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 August 16, 2013 at 11:42 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
yoda Posted August 16, 2013 at 11:42 PM Report #521920 Posted August 16, 2013 at 11:42 PM $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 --'; } } before you post, what have you tried? - http://filipematias.info sense, purpose, direction
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now