萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php 計算四則運算表達式

php 計算四則運算表達式

關於計算四則運算表達式方法簡單的應用介紹有需要的朋友可以參考一下。

<?php教程
 2
 3 /**
 4  * 計算四則運算表達式
 5  */
 6
 7 error_reporting(E_ALL);
 8
 9 $exp = '(1+2*(3+5)/4)*(3+(5-4)*2)';
10 $arr_exp = array();
11
12 for($i=0;$i<strlen($exp);$i++){
13     $arr_exp[] = $exp[$i];
14 }
15 $result = calcexp( array_reverse($arr_exp) );
16 echo $exp . '=' . $result;
17
18 function calcexp( $exp ){
19     $arr_n = array();
20     $arr_op = array();
21    
22     while( ($s = array_pop( $exp )) != '' ){
23         if( $s == '(' ){
24             $temp = array(); $quote = 1; $endquote = 0;
25             while( ($t = array_pop($exp)) != '' ){
26                 if( $t == '(' ){
27                     $quote++;
28                 }
29                 if( $t == ')' ){
30                     $endquote++;
31                     if( $quote == $endquote ){
32                         break;
33                     }
34                 }
35                 array_push($temp, $t);
36             }
37             $temp = array_reverse($temp);
38             array_push($arr_n, calcexp($temp) );
39         }else if( $s == '*' || $s == '/' ){
40             $n2 = array_pop($exp);
41             if( $n2 == '(' ){
42                 $temp = array(); $quote = 1; $endquote = 0;
43                 while( ($t = array_pop($exp)) != '' ){
44                     if( $t == '(' ){
45                         $quote++;
46                     }
47                     if( $t == ')' ){
48                         $endquote++;
49                         if( $quote == $endquote )
50                             break;
51                     }
52                     array_push($temp, $t);
53                 }
54                 $temp = array_reverse($temp);
55                 $n2 = calcexp($temp);
56             }
57            
58             $op = $s;
59             $n1 = array_pop($arr_n);
60            
61             $result = operation($n1, $op, $n2);
62             array_push($arr_n, $result);
63         }elseif( $s == '+' || $s == '-' ){
64             array_push($arr_op, $s);
65         }else{
66             array_push($arr_n, $s);
67         }
68     }
69    
70     $n2 = array_pop($arr_n);
71     while( ($op = array_pop($arr_op)) != '' ){
72         $n1 = array_pop($arr_n);
73         $n2 = operation($n1, $op, $n2);
74     }
75    
76     return $n2;
77 }
78
79 function operation( $n1, $op, $n2 ){
80     switch ($op) {
81         case '+':
82             return intval($n1) + intval($n2);
83             break;
84         case '-':
85             return intval($n1) - intval($n2);
86             break;
87         case '*':
88             return intval($n1) * intval($n2);
89             break;
90         case '/':
91             return intval($n1) / intval($n2);
92             break;
93     }
copyright © 萬盛學電腦網 all rights reserved