php 公式解析,实现单操作符简单公式解析

$string = "#data_1 / #data_2";

class operate{

private $params;

private $dataarray;

private $result;

private function getResult() {

return $this->result;

}

private function setResult($result) {

$this->result = $result;

}

private function getDataarray() {

return $this->dataarray;

}

private function setDataarray($dataarray) {

$this->dataarray = $dataarray;

}

private function getParams() {

return $this->params;

}

public function setParams($params) {

$this->params = $params;

}

private function add($data_1,$data_2){

return $data_1+$data_2;

}

private function minus($data_1,$data_2){

return $data_1-$data_2;

}

private function multiply($data_1,$data_2){

return $data_1*$data_2;

}

private function divide($data_1,$data_2){

return $data_1/$data_2;

}

private function stringtoarray(){

$params = $this->getParams();

$dataarray = explode(" ", $params);

$this->setDataarray($dataarray);

}

private function getpos($array){

$pos = array();

$nums = sizeof($array);

for ($i=0;$iif(!is_numeric($array[$i])){

$pos[] = $i;

}

}

return $pos;

}

private function getdividepos(){

$array = $this->getDataarray();// ||$expressionarray

$pos = array();

$nums = sizeof($array);

for ($i=0;$iif($array[$i]=="/"){

$pos[] = $i;

}

}

return $pos;

}

private function iszero(){

$dataarray = $this->getDataarray();

//print_r($dataarray);

$array = $this->getdividepos(); // ||$devidpos

//print_r($array);

$nums = sizeof($array);

echo "

iszero nums:".$nums."

";

if ($nums==0){

$this->setResult(1);

}else{

for ($i=0;$i$key = $array[$i]+1;

//$key = $i + 1;

echo "

key :$key

";

//echo "data:".$dataarray[$key];

$data = (int)($dataarray[$key]);

echo "data:".$data."

";

if ($data==0){

$this->setResult(0);

}

else {

$this->setResult($data);

}

}

}

}

public function main(){

$this->stringtoarray();

$dataarray = $this->getDataarray(); //array("#data_1","/","#data_2");

print_r($dataarray);

$dividepos = $this->iszero();

$result = $this->getResult();

echo "reslut:".$result."

";

if($result==0){

return 0;

}else{

$operatepos = $this->getpos($dataarray);

$nums = sizeof($operatepos);

for($i=0;$i$pos = $operatepos[$i];

$operate = $dataarray[$pos];

echo "operate:".$operate."

";

switch ($operate){

case "+":

$key1 = $pos - 1;

$key2 = $pos + 1;

$data_1 = $dataarray[$key1];

$data_2 = $dataarray[$key2];

$tempdata = $this->add($data_1, $data_2);

return $tempdata;

case "-":

$key1 = $pos - 1;

$key2 = $pos + 1;

$data_1 = $dataarray[$key1];

$data_2 = $dataarray[$key2];

$tempdata = $this->minus($data_1, $data_2);

return $tempdata;

case "*":

$key1 = $pos - 1;

$key2 = $pos + 1;

$data_1 = $dataarray[$key1];

$data_2 = $dataarray[$key2];

$tempdata = $this->multiply($data_1, $data_2);

return $tempdata;

case "/":

$key1 = $pos - 1;

$key2 = $pos + 1;

$data_1 = $dataarray[$key1];

$data_2 = $dataarray[$key2];

$tempdata = $this->divide($data_1, $data_2);

return $tempdata;

}

}

}

}

}

$data_3 = "2 * 3";

$compute = new operate();

$compute ->setParams($data_3);

echo "result:".$compute->main();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值