Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membina Kalkulator dalam PHP Menggunakan Algoritma Shunting Yard?
Dalam PHP, mencipta kalkulator memerlukan menghuraikan dan menilai ungkapan matematik yang dimasukkan oleh pengguna. Ini mungkin mencabar, kerana ia melibatkan pengendalian input pengguna dan menggunakan operasi matematik.
Satu pendekatan yang disyorkan ialah memanfaatkan Algoritma Shunting Yard. Algoritma ini menukar ungkapan matematik kepada Notasi Bahasa Poland Songsang (RPN), yang lebih mudah untuk dinilai.
Berikut ialah contoh mudah menggunakan Algoritma Shunting Yard:
// Terminal expression abstract class abstract class TerminalExpression { public function operate() { return $this->value; } public function isOperator() { return false; } public function isParenthesis() { return false; } public function isNoOp() { return false; } } // Operator expression abstract class abstract class Operator extends TerminalExpression { public function isOperator() { return true; } } // Stack implementation class Stack { private $data = []; public function push($element) { $this->data[] = $element; } public function peek() { return end($this->data); } public function pop() { return array_pop($this->data); } } // Math class for evaluation class Math { public function evaluate($expression) { $stack = $this->parse($expression); return $this->run($stack); } private function parse($expression) { $tokens = $this->tokenize($expression); $output = new Stack(); $operators = new Stack(); foreach ($tokens as $token) { $type = TerminalExpression::factory($token); if ($type->isOperator()) { $this->parseOperator($type, $output, $operators); } elseif ($type->isParenthesis()) { $this->parseParenthesis($type, $output, $operators); } else { $output->push($type); } } while (($op = $operators->pop())) { if ($op->isParenthesis()) { throw new RuntimeException('Mismatched Parenthesis'); } $output->push($op); } return $output; } private function run(Stack $stack) { while (($operator = $stack->pop()) && $operator->isOperator()) { $value = $operator->operate($stack); if ($value !== null) { $stack->push(TerminalExpression::factory($value)); } } return $operator ? $operator->render() : $this->render($stack); } protected function tokenize($string) { return preg_split('((\d+|\+|-|\(|\)|\*|/)|\s+)', $string, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); } } $math = new Math(); $answer = $math->evaluate('(2 + 3) * 4'); var_dump($answer); // int(20)
Contoh ini menunjukkan cara menggunakan Algoritma Shunting Yard untuk menghuraikan dan menilai ungkapan matematik.
Atas ialah kandungan terperinci Bagaimana untuk Membina Kalkulator dalam PHP Menggunakan Algoritma Shunting Yard?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!