In diesem Artikel wird hauptsächlich die von PHP implementierte einfache Rechnerfunktion für vier arithmetische Operationen vorgestellt und die von PHP implementierte Ausdrucksberechnungsfunktion anhand von Beispielen analysiert. Freunde in Not können sich darauf beziehen
Die Beispiele in diesem Artikel beschreiben eine einfache, in PHP implementierte Rechnerfunktion mit vier Arithmen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
php implementiert einen einfachen Vier-Arithmetik-Rechner (er unterstützt noch nicht die Priorität von Klammern). Es ist großartig, eine Datenstruktur wie einen Stapel zum Auswerten von Ausdrücken zu verwenden.
Da die Arrays von PHP „natürlich“ Stack-Eigenschaften haben, werden hier direkt Arrays verwendet. Natürlich können Sie die Stapelstruktur zum Schreiben verwenden, das Prinzip ist dasselbe.
Senior (ein polnischer Wissenschaftler) berechnet vier reguläre Ausdrücke mit Klammern unter Verwendung des umgekehrten polnischen Algorithmus (Suffix-Ausdrucksmethode). Einfach unglaublich! ! Tatsächlich ist das Codieren nicht schwierig. Was schwierig ist, ist die Anleitung des Algorithmus. Bevor Sie codieren können, müssen Sie den Algorithmus verstehen.
<?php $num_arr = array();// 声明数字栈 $op_arr = array();// 声明符号栈 $str = "10+6*2-18/2-2"; preg_match_all('/./', $str, $arr);// 把运算串分解成每个字符到$arr数组 $str_arr = $arr[0]; $length = count($str_arr); $pre_num = ''; // 开始入栈 for($i=0; $i<$length; $i++){ $val = $str_arr[$i]; // 数字 if (is_numeric($val)){ $pre_num .= $val;// 兼顾下一个字符可能也是数字的情况(多位数) if($i+1>=$length || isOper($str_arr[$i+1])){// 下一个是运算符或者到头了,则把数字塞进数字栈 array_push($num_arr, $pre_num); $pre_num = ''; } // 符号判断优先级,选择是否入栈 } else if (isOper($val)){ if (count($op_arr)>0){ // 判断优先级,只要不大于符号栈顶的优先级,就开始计算,直到优先级大于了栈顶的,计算后才再把这个运算符入栈 while (end($op_arr) && priority($val) <= priority(end($op_arr))){ calc($num_arr, $op_arr); } } array_push($op_arr, $val); } } //echo '<pre class="brush:php;toolbar:false">'; //print_r($num_arr); //print_r($op_arr); // 计算栈里剩余的 while(count($num_arr)>0){ calc($num_arr, $op_arr); if (count($num_arr)==1){ $result = array_pop($num_arr); break; } } echo $str,' = ', $result; // 计算,获取数字栈的两个数,符号栈顶的运算符 function calc(&$num_arr, &$op_arr){ if (count($num_arr)>0){ $num1 = array_pop($num_arr); $num2 = array_pop($num_arr); $op = array_pop($op_arr); if ($op=='*') $re = $num1*$num2; if ($op=='/') $re = $num2/$num1;// 这里注意顺序,栈是先进后出,所以$num2是被除数 if ($op=='+') $re = $num2+$num1; if ($op=='-') $re = $num2-$num1; array_push($num_arr, $re); } } // 获取优先级 function priority($str){ if ($str == '*' || $str == '/'){ return 1; } else { return 0; } } // 判断是否是运算符 function isOper($oper){ $oper_array = array('+','-','*','/'); if (in_array($oper, $oper_array)){ return true; } return false; }
Laufergebnisse:
10+6*2-18/2-2 = 11
PS: hier Als weitere Referenz möchte ich Ihnen mehrere Berechnungstools empfehlen:
Online-Berechnungstool zur Lösung einer Funktion (Gleichung) mit einer Variablen:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
Wissenschaftlicher Rechner online verwenden_Erweiterter Rechner online berechnen:
http:/ /tools. jb51.net/jisuanqi/jsqkexue
Online-Rechner_Standardrechner:
http://tools.jb51.net/jisuanqi /jsq
Anfänger-Tutorial für Laravel-Framework-Blade-Vorlagen
Das obige ist der detaillierte Inhalt vonBeispielerklärung einfacher, in PHP implementierter Rechnerfunktionen mit vier arithmetischen Operationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!