Hola de nuevo, la respuesta la tienes en este código:
Código PHP:
<?php
$operacion = "30*2+8/6";
$pos = 0;
if ( !is_int ( $operacion ) )
{
for ( $y = 0; $y < strlen ( $operacion ); $y++ )
{
$operaciones = array ( '+', '-', '*', '/' );
for ( $x = 0 ; $x < count ( $operaciones ); $x++ )
{
if ( substr ( $operacion, $pos, 1 ) == $operaciones[$x] )
{
// si encontro una operación guardamos su posicion y la operacion
$op[] = $pos.",".substr ( $operacion, $pos, 1 );
}
}
$pos += 1;
}
$contador = 1;
$acumula = 0;
for ( $e = 0; $e < count ($op); $e++ )
{
$divide = explode ( ",", $op[$e] );
if ( $e != count ( $op ) - 1 )
{
$siguiente = explode ( ",", $op[$e + 1] );
$sig_operacion = $siguiente[0] + 1;
}
else
{
$sig_operacion = strlen ( $operacion ) - ( $divide[0] + 1 );
}
if ( $contador == 1 )
{
$calcula[] = substr ( $operacion, 0, $divide[0] );
$calcula[] = substr ( $operacion, $divide[0] + 1, $sig_operacion );
switch ( $divide[1] )
{
case '+':
$resultado = $calcula[0] + $calcula[1];
break;
case '-':
$resultado = $calcula[0] - $calcula[1];
break;
case '*':
$resultado = $calcula[0] * $calcula[1];
break;
case '/':
$resultado = $calcula[0] / $calcula[1];
break;
default:
echo '<p>No es una operación valida.</p>';
break;
}
$acumula = $resultado;
$contador += 1;
}
else
{
$calcula = substr ( $operacion, $divide[0] + 1, $sig_operacion );
switch ( $divide[1] )
{
case '+':
$resultado = $acumula + $calcula;
break;
case '-':
$resultado = $acumula - $calcula;
break;
case '*':
$resultado = $acumula * $calcula;
break;
case '/':
$resultado = $acumula / $calcula;
break;
default:
echo '<p>No es una operación valida.</p>';
break;
}
$acumula = $resultado;
}
}
echo $acumula;
}
else
{
echo $operacion;
}
?>
Nota: No se podrán hacer operaciones con cararcteres extraños, es decir, la operacion a realizar no puede estar declarada de esta forma (2*8)-6, pero si puede estar de este modo 2*8-6. ¿Me entiendes? La variable operación sólo puede contener números y las operaciones /,*,+,-.
Espero te sirva de algo o por lo menos te de una idea. Suerte