百度谷歌搜索无果,之好自己造一次轮子。
function rpn2html' target='_blank'>value($str){ $arr = explode(',',$str); $stack = array(); $len = count($arr); for($i=0;$i<$len;$i++){ if(is_numeric($arr[$i])){ array_push($stack,$arr[$i]); }else{ $op = $arr[$i]; $right = array_pop($stack); $left = array_pop($stack); eval("/$re = $left $op $right;"); array_push($stack,$re); } } return $stack[0];}
使用方法:
$str = "1,2,3,+,*,4,-,5,+,7,*";echo rpn2value($str);
另附中序转后序代码,版权归原作者所有
/** * math_rpn * * 实现逆波兰式算法 * * @author sparkHuang 260558820@qq.com * @version RPN 1.0.0 * */class math_rpn { //初始的计算表达式 private $_expression = ''; //处理后的逆波兰表达式 private $_rpnexp = array(); //模拟栈结构的数组 www.it165.net private $_stack = array('#'); //正则判断 //private $_reg = '/^([A-Za-z0-9/(/)/+/-/*//])*$/'; //优先级 private $_priority = array('#' => 0, '(' => 10, '+' => 20, '-' => 20, '*' => 30, '/' => 30); //四则运算 private $_operator = array('(', '+', '-', '*', '/', ')'); public function __construct($expression) { $this->_init($expression); } private function _init($expression) { $this->_expression = $expression; } public function exp2rpn() { $len = strlen($this->_expression); for($i = 0; $i < $len; $i++) { $char = substr($this->_expression, $i, 1); if ($char == '(') { $this->_stack[] = $char; continue; } else if ( ! in_array($char, $this->_operator)) { $this->_rpnexp[] = $char; continue; } else if ($char == ')') { for($j = count($this->_stack); $j >= 0; $j--) { $tmp = array_pop($this->_stack); if ($tmp == "(") { break; } else { $this->_rpnexp[] = $tmp; } } continue; } else if ($this->_priority[$char] <= $this->_priority[end($this->_stack)]) { $this->_rpnexp[] = array_pop($this->_stack); $this->_stack[] = $char; continue; } else { $this->_stack[] = $char; continue; } } for($i = count($this->_stack); $i >= 0; $i--) { if (end($this->_stack) == '#') break; $this->_rpnexp[] = array_pop($this->_stack); } return $this->_rpnexp; }}//测试实例$expression = "(A*(B+C)-E+F)*G";var_dump($expression);$mathrpn = new math_rpn($expression);var_dump($mathrpn->exp2rpn());PHP编程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答