Foros del Web » Programando para Internet » PHP »

Operador de comparación desde variable

Estas en el tema de Operador de comparación desde variable en el foro de PHP en Foros del Web. Buenas tardes. Necesito que la condición de mis if sea variable, ejemplo: $valor1 = 1; $valor2 = 2; $condicion = '>='; if($valor1 $condicion $valor2){ } ...
  #1 (permalink)  
Antiguo 15/06/2016, 12:48
 
Fecha de Ingreso: septiembre-2015
Mensajes: 71
Antigüedad: 8 años, 7 meses
Puntos: 0
Operador de comparación desde variable

Buenas tardes.

Necesito que la condición de mis if sea variable, ejemplo:

$valor1 = 1;
$valor2 = 2;
$condicion = '>=';

if($valor1 $condicion $valor2){

}

Eso así no funciona, ¿hay alguna forma de hacer eso?

Gracias
  #2 (permalink)  
Antiguo 15/06/2016, 12:57
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Operador de comparación desde variable

Puedes usar un map o eval, pero creo que sería mejor que comentaras porque quieres hacer eso, ya que usar eval es como la ultima opción que nunca debes de usar.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 15/06/2016, 13:30
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Operador de comparación desde variable

También creo como hhs que tendrías que decir para que quieres eso, de lo contrario yo te propongo esta opción, ya que dependiendo de la condición querrás que haga una cosa u otra, y de tu forma solo veo un condicional if por lo que hará lo mismo independientemente de la condición

Código PHP:
Ver original
  1. $valor1 = 1;
  2. $valor2 = 2;
  3. $condicion = "<";
  4.  
  5. switch ($condicion) {
  6.     case "<":
  7.         //tu sentencia con tus valores;
  8.         break;
  9.     case ">":
  10.         //tu sentencia con tus valores;
  11.         break;
  12.     case "<=":
  13.         //tu sentencia con tus valores;
  14.         break;
  15.   case ">=":
  16.         //tu sentencia con tus valores;
  17.         break;
  18. }
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #4 (permalink)  
Antiguo 15/06/2016, 13:53
 
Fecha de Ingreso: septiembre-2015
Mensajes: 71
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Operador de comparación desde variable

La opción del switch es la que se me había ocurrido , pero estaba buscando la forma de hacerlo en menos lineas, voy a explicar para q lo necesito

Tengo una tabla llamada indicadores que tiene los campos nombre, valorReal, condicion y valorObjetivo

LO que hace el usuario al dar de alta un indicador es:
- insertar el nombre
- inserta el valor real
- inserta el valor objetivo
- inserta la condición para saber como se debe comparar

Si se cumple la condición se marca en verde y si no en rojo.

No se si me he explicado bien.
  #5 (permalink)  
Antiguo 15/06/2016, 14:14
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Operador de comparación desde variable

No se si he llegado a entenderlo bien, lo que entiendo es que el usuario introduce los datos y la condición, y si la condición es correcta la marca verde y si no en rojo.

Creo que con un switch va que sobra, tal vez haya una solución más corta, pero no por eso un switch es más o menos correcto, de hecho, tal vez sea incluso más correcto el switch en este caso, ya que tu mismo identificaste como hacerlo con el, y has perdido más tiempo en busca otra solución alternativa, por lo que en términos productivos has salido perdiendo buscando otra solución.

Por cierto ten en cuenta que dependiendo que condicional ponga puede aparecer que varios condicionales pueden ser correctos ( también depende de la libertad que le des al usuario ). como en el caso de 1 < 2 o 1 != 2.

Código PHP:
Ver original
  1. $valor1 = 1;
  2. $valor2 = 2;
  3. $condicion = "<";
  4.  
  5. switch ($condicion) {
  6.     case "!=":
  7.         echo "Correcto !!";
  8.         //aplicamos estilos en verde
  9.         break;
  10.     case "==":
  11.         echo "Incorrecto !!";
  12.         //aplicamos estilos en rojo
  13.         break;
  14.     case "<":
  15.         echo "Correcto !!";
  16.         //aplicamos estilos en verde
  17.         break;
  18.     case ">":
  19.         echo "Incorrecto !!";
  20.         //aplicamos estilos en rojo
  21.         break;
  22.     case "<=":
  23.         echo "Incorrecto !!";
  24.         //aplicamos estilos en rojo
  25.         break;
  26.   case ">=":
  27.         echo "Incorrecto !!";
  28.         //aplicamos estilos en rojo
  29.         break;
  30. }
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 15/06/2016 a las 14:19
  #6 (permalink)  
Antiguo 16/06/2016, 02:51
 
Fecha de Ingreso: septiembre-2015
Mensajes: 71
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Operador de comparación desde variable

Una última pregunta

¿Por que eval() debe ser la útlima opcion?
  #7 (permalink)  
Antiguo 16/06/2016, 05:47
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Operador de comparación desde variable

Según la documentación oficial:

Precaución
El constructor de lenguaje eval() es muy peligroso porque permite la ejecución de código de PHP arbitrario. Su uso está totalmente desaconsejado. Si se ha verificado cuidadosamente que no existe otra opción que usar este constructor, se ha de poner especial atención en no pasar ninguna información proporcionada por el usuario a esta función sin haberla validado apropiadamente con anterioridad.
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Etiquetas: operador, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:07.