# Php calculates four arithmetic expressions

Source: Internet
Author: User

<? Php Tutorial
2
3 /**
4 * calculate four arithmetic expressions
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}
Related Keywords:
Related Article

## E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

## Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

## Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth \$300-1200 USD