Parse math operations with PHP

I am working on a project where I need to make a function that will parse the 4 default math operations (addition, subtraction, multiplication, division). It would be nice if the function could parse operations between brackets.

So, a must is that the function first check for multiplication and division operations (should check for that after it parser all operations between brackets if they exist, and that rule should apply for bracket operations [the biggest problem is that the brackets can contain brackets]). After doing all multiplication and division operations, it should do all addition and subtraction operations. The final number should be returned by functions.

Another nice addition would be a RegExp string that will check for math operations.

Thanks in advance!


Solution 1:

This should be pretty secure:

function do_maths($expression) {
  eval('$o = ' . preg_replace('/[^0-9\+\-\*\/\(\)\.]/', '', $expression) . ';');
  return $o;
}

echo do_maths('1+1');

Solution 2:

You could use eval() (WARNING: be sure what enters is a math operation and not some other arbitrary input or php code).

$input = "3 + (4 - 2 * 8) / 2";

eval('$result = ' . $input . ';');

echo "The result is $result";

Solution 3:

there was a similar problem
How to evaluate formula passed as string in PHP? you can try to use Class: Eval Math from php classes http://www.phpclasses.org/package/2695-PHP-Safely-evaluate-mathematical-expressions.html

Solution 4:

I can recommend https://github.com/andig/php-shunting-yard which is a PSR-0 compatible implementation of the Shunting Yard algorithm.