Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Operador en variable

Estas en el tema de Operador en variable en el foro de PHP en Foros del Web. Buenas tardes estoy intentando pasar un operador aritmético en una variable, por ejemplo: Código PHP: <?php $operadores  = array( '+' , '-' , '*' , '/' ...
  #1 (permalink)  
Antiguo 09/07/2014, 10:59
 
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 8 años, 1 mes
Puntos: 0
Pregunta Operador en variable

Buenas tardes estoy intentando pasar un operador aritmético en una variable, por ejemplo:

Código PHP:
<?php
$operadores 
= array('+','-','*','/',);
$total count($operadores) -1
$n rand(0$total); 
$operador $operadores[$n];

$v1 2;
$v2 3;

echo 
$v1.$operador.$v2;
?>
Lo que quiero es que imprima el resultado, pero me imprime el signo(operador)

Es para generar operaciones matemáticas de forma aleatoria

He estado mirando por todos sitios y creo que no es posible.
Si alguien me puede ayudar.
  #2 (permalink)  
Antiguo 09/07/2014, 11:10
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 11 años, 3 meses
Puntos: 123
Respuesta: Operador en variable

Lo que buscas creo es la funcio eval()
eval()

Usala con cuidado
  #3 (permalink)  
Antiguo 09/07/2014, 11:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 13 años, 9 meses
Puntos: 2534
Respuesta: Operador en variable

Es mala idea usar calc(), otra forma sería así:
Código PHP:
Ver original
  1. function calc($left, $op, $right) {
  2.   switch ($op) {
  3.     case '*': return $left * $right; break;
  4.     case '/': return $left / $right; break;
  5.     case '+': return $left + $right; break;
  6.     case '-': return $left - $right; break;
  7.   }
  8. }
  9.  
  10. echo calc(3, '*', 5); // 15

Y así evitas cualquier problema potencial de usar eval().
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 09/07/2014, 11:43
 
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Operador en variable

La verdad es que con eval(), creo que no funciona, se sigue imprimiendo el signo

Código PHP:
<?php
$operador 
'+';

$v1 2;
$v2 3;
$str $v1$operador .$v2;

eval(
"\$str = \"$str\";");
echo 
$str"\n";
?>
imprime 2+3, debería imprimir 5

seguiré probando
Gracias
  #5 (permalink)  
Antiguo 09/07/2014, 12:02
 
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Operador en variable

Gracias pateketrueke, creo que es una buena solución, la función funciona, ahora tratare de adaptarla a una cadena de varias operaciones, para plantear ejercicios de calculo mental.

Código PHP:
<?php
function calc($left$op$right) {
  switch (
$op) {
    case 
'*': return $left $right; break;
    case 
'/': return $left $right; break;
    case 
'+': return $left $right; break;
    case 
'-': return $left $right; break;
  }
}
$operadores = array('+','-','*','/',);
$total count($operadores) -1
$n rand(0$total); 
$op $operadores[$n];

$v1 rand(1020);
$v2 rand(010);

echo 
"$v1 $op $v2 = ".calc($v1,$op,$v2);

?>
Cada vez que actualizas cambia la operación, y si imprime el resultado.
Ya te cuento

Última edición por josebaillo; 09/07/2014 a las 12:04 Razón: resaltar
  #6 (permalink)  
Antiguo 10/07/2014, 15:07
 
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Operador en variable

Decirle a xerifandtomas que si, que si funciona con la función eval()

Código PHP:
<?php
$operadores 
= array('+','-','*','/',);
$total count($operadores) -1;
$n rand(0$total); 
$operador $operadores[$n]; 

$v1 2
$v2 3

eval(
'$resultado='.$v1.$operador.$v2.';');
echo 
$v1.$operador.$v2.' = '.$resultado;
?>
Muchas gracias
  #7 (permalink)  
Antiguo 10/07/2014, 15:12
 
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Operador en variable

Al final lo he hecho usando la función de pateketrueke, la he podido adaptar al script que estaba desarrolando y va perfecto.

la prueba de que funciona en:

http://matesdeprimaria.es/calculo_mental.php


Muchas gracias.

Etiquetas: operadores
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 10:24.