Search
 
SCRIPT & CODE EXAMPLE
 

PHP

Calculate Math Expression From A String Text With PHP

<?php
class Field_calculate {
    const PATTERN = '/(?:-?d+(?:.?d+)?[+-*/])+-?d+(?:.?d+)?/';

    const PARENTHESIS_DEPTH = 10;

    public function calculate($input){
        if(strpos($input, '+') != null || strpos($input, '-') != null || strpos($input, '/') != null || strpos($input, '*') != null){
            //  Remove white spaces and invalid math chars
            $input = str_replace(',', '.', $input);
            $input = str_replace(' ', '', $input);
            $input = preg_replace('[^0-9.+-*/()]', '', $input);

            //  Calculate each of the parenthesis from the top
            $i = 0;
            while(strpos($input, '(') || strpos($input, ')')){
                $input = preg_replace_callback('/(([^()]+))/', 'self::callback', $input);

                $i++;
                if($i > self::PARENTHESIS_DEPTH){
                    break;
                }
            }

            //  Calculate the result
            if(preg_match(self::PATTERN, $input, $match)){
                return $this->compute($match[0]);
            }
            // To handle the special case of expressions surrounded by global parenthesis like "(1+1)"
            if(is_numeric($input)){
                return $input;
            }

            return 0;
        }

        return $input;
    }

    private function compute($input){
        $compute = create_function('', 'return '.$input.';');

        return 0 + $compute();
    }

    private function callback($input){
        if(is_numeric($input[1])){
            return $input[1];
        }
        elseif(preg_match(self::PATTERN, $input[1], $match)){
            return $this->compute($match[0]);
        }

        return 0;
    }
}
$Cal = new Field_calculate();
$xyz='(100 * 25000) + (250 * 25000) + ((500/100) * 25000)';
$result = $Cal->calculate($xyz);
echo $result;

?>
Comment

PREVIOUS NEXT
Code Example
Php :: media library laravel maximum allowed size 
Php :: PHP - AJAX and MySQL 
Php :: static variable php 
Php :: laravel getClientOriginalExtension 
Php :: Laravel Retrieving & Deleting An Item from session 
Php :: get search query wordpress dev 
Php :: laravel combo unique validation 
Php :: find in associative array php by property value 
Php :: laravel repository 
Php :: You need to grant write permissions for PHP on the following directory: /var/www/html/prestashop 
Php :: laravel blade excerpt from body 
Php :: @admin @endadmin 
Php :: laravel collection isNotEmpty 
Php :: laravel reroute 419 
Php :: Undefined property: stdClass::$ 
Php :: wordpress login programmatically 
Php :: Laravel unique Validation with multiple column 
Php :: php using composer autoload 
Php :: Laravel get all parent categories for each category 
Php :: get origin for request symfony 
Php :: envoyer des donnees js a php 
Php :: change apply coupon text woocommerce 
Php :: create qr code png image of 200*200 using phpqrcode 
Php :: curl failed laravel centos 
Php :: count array index foreach in php 
Php :: routing with php 
Php :: get ids from object 
Php :: laravel follow and unfollow relationship 
Php :: php round function syntax 
Php :: What was the old name of PHP? 
ADD CONTENT
Topic
Content
Source link
Name
9+3 =