ホームページ >バックエンド開発 >PHPチュートリアル >操車場アルゴリズムを使用して PHP で電卓を構築するにはどうすればよいですか?
PHP で電卓を作成するには、ユーザーが入力した数式を解析して評価する必要があります。これには、ユーザー入力の処理と数学的演算の適用が含まれるため、難しい場合があります。
推奨されるアプローチの 1 つは、操車場アルゴリズムを活用することです。このアルゴリズムは、数式を評価しやすい逆ポーランド記法 (RPN) に変換します。
操車場アルゴリズムを使用した簡略化された例を次に示します。
// 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)
この例では、操車場アルゴリズムを使用して単純な数学的アルゴリズムを解析および評価する方法を示します。表現。
以上が操車場アルゴリズムを使用して PHP で電卓を構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。