一个递归计算数学表达式的函数

<?php
/**
* version:1.0
* author:于燚
* 2012年3月23日21:21:30
* 函数功能:计算任意加减乘除数学表达式的结果
* eg:echo jisuan("2/5-9+8*3/4");//输出结果2.6
* 更多功能正努力中......
*
* */
function jisuan($str){
$pat1="/\+/";
$pat2="/-/";
$pat3="/\*/";
$pat4="/\//";
$sum=0;
if(preg_match($pat1,$str)){
$arr=explode("+",$str);
foreach($arr as $val){
$pat="/[\/\*\+-]/";
if(preg_match($pat,$val)){
$val=jisuan($val);
}
$sum+=$val;
}
}else if(preg_match($pat2,$str)){
$arr=explode("-",$str);
foreach($arr as $key => $val){
$pat="/[\/\*]/";
if(preg_match($pat,$val)){
$val=jisuan($val);
}
if($key==0){
$sum=$val;
}else{
$sum-=$val;
}
}
}else if(preg_match($pat3,$str)){
$arr=explode("*",$str);
foreach($arr as $key => $val){
$pat="/[\/]/";
if(preg_match($pat,$val)){
$val=jisuan($val);
}
if($key==0){
$sum=$val;
}else{
$sum*=$val;
}
}
}else{
$arr=explode("/",$str);
foreach($arr as $key => $val){
if($key==0){
$sum=$val;
}else{
if($val==0){
header("Content-Type:text/html;charset=utf-8");
exit("表达式不合法!!!");
}
$sum/=$val;
}
}
}
return $sum;
}
echo jisuan("2/5-9+8*3/4");

?>

原文地址:http://bbs.lampbrother.net/read-htm-tid-117286.html

posted on 2012-03-26 14:39  springside5  阅读(235)  评论(0编辑  收藏  举报