Una calculadora que sume, reste, multiplique y divida puede ser implementada de forma simple y segura así:
Código PHP:
Ver original<?php
// La operación a resolver.
$op = "7 + 5 - 4 / 2 + 3 * 2";
// Eliminar espacios y caracteres @ existentes, luego agregar un @ antes de cada signo y al final de la formula.
$op = str_replace(["@", " ", "+", "-", "*", "/"], ["", "", "@+", "@-", "@*", "@/"], $op)."@";
// Variables a usar.
$final = 0; // Acumulador, almacena el resultado final.
$parcial = 0; // Acumulador, almacena el resultado parcial de cada termino.
$signo = "+"; // Indicador, almacena el ultimo signo empleado, por defecto suma.
// Recorrer cada numero y operación de la formula de forma implicita.
// Se usa la variable original como iteradora para ahorrar memoria.
{
// Si es una operación de alta prioridad se procesa dentro del termino parcial.
if($op[0] == "*" || $op[0] == "/") // El primer carácter es la operación.
$parcial *= ($op[0] == "*" ?
substr($op, 1) : 1/substr($op, 1)); // Multiplicar o dividir. else
{
// Si es una operacion de baja prioridad se procesa dentro del resultado final.
$final += $parcial * ($signo == "+" ? 1 : -1); // Sumar o restar.
// Si el numero tiene un signo.
if($op[0] == "+" || $op[0] == "-")
{
$parcial = substr($op, 1); // Guardar el numero sin signo. $signo = $op[0]; // Guardar el signo.
}
else // Es un numero sin signo, Ej: el primer numero de la formula.
$parcial = $op;
}
}
unset($parcial, $signo, $op); // Liberar la memoria. echo $final; // Mostrar el resultado.