Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie vier arithmetische Operationen in PHP

So implementieren Sie vier arithmetische Operationen in PHP

藏色散人
藏色散人Original
2021-03-12 09:41:083969Durchsuche

So implementieren Sie vier arithmetische Operationen in PHP: Erstellen Sie zunächst eine PHP-Beispieldatei, deklarieren Sie dann den Operationsstring in jedes Zeichen und übergeben Sie schließlich „function calc(&$num_arr , &$ op_arr){}“ und andere Methoden können zur Implementierung der vier arithmetischen Operationen verwendet werden.

So implementieren Sie vier arithmetische Operationen in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

php implementiert einen einfachen Vier-Rechen-Rechner (die Priorität von Klammern wird noch nicht unterstützt). Es ist großartig, eine Datenstruktur wie einen Stapel zum Auswerten von Ausdrücken zu verwenden.

Da die Arrays von PHP „natürlich“ die Eigenschaften eines Stacks haben, werden hier direkt Arrays verwendet. Natürlich können Sie die Stapelstruktur zum Schreiben verwenden, das Prinzip ist dasselbe.

Senior (ein polnischer Wissenschaftler) berechnet vier Ausdrücke mit Klammern unter Verwendung des umgekehrten polnischen Algorithmus (Suffix-Ausdrucksmethode). Einfach unglaublich! ! Tatsächlich ist das Codieren nicht schwierig. Was schwierig ist, ist die Anleitung des Algorithmus. Bevor Sie codieren können, müssen Sie den Algorithmus verstehen.

<?php
$num_arr = array();// 声明数字栈
$op_arr = array();// 声明符号栈
$str = "10+6*2-18/2-2";
preg_match_all(&#39;/./&#39;, $str, $arr);// 把运算串分解成每个字符到$arr数组
$str_arr = $arr[0];
$length = count($str_arr);
$pre_num = &#39;&#39;;
// 开始入栈
for($i=0; $i<$length; $i++){
  $val = $str_arr[$i];
  // 数字
  if (is_numeric($val)){
    $pre_num .= $val;// 兼顾下一个字符可能也是数字的情况(多位数)
    if($i+1>=$length || isOper($str_arr[$i+1])){// 下一个是运算符或者到头了,则把数字塞进数字栈
      array_push($num_arr, $pre_num);
      $pre_num = &#39;&#39;;
    }
  // 符号判断优先级,选择是否入栈
  } else if (isOper($val)){
    if (count($op_arr)>0){
      // 判断优先级,只要不大于符号栈顶的优先级,就开始计算,直到优先级大于了栈顶的,计算后才再把这个运算符入栈
      while (end($op_arr) && priority($val) <= priority(end($op_arr))){
        calc($num_arr, $op_arr);
      }
    }
    array_push($op_arr, $val);
  }
}
//echo &#39;<pre class="brush:php;toolbar:false">&#39;;
//print_r($num_arr);
//print_r($op_arr);
// 计算栈里剩余的
while(count($num_arr)>0){
  calc($num_arr, $op_arr);
  if (count($num_arr)==1){
    $result = array_pop($num_arr);
    break;
  }
}
echo $str,&#39; = &#39;, $result;
// 计算,获取数字栈的两个数,符号栈顶的运算符
function calc(&$num_arr, &$op_arr){
  if (count($num_arr)>0){
    $num1 = array_pop($num_arr);
    $num2 = array_pop($num_arr);
    $op = array_pop($op_arr);
    if ($op==&#39;*&#39;) $re = $num1*$num2;
    if ($op==&#39;/&#39;) $re = $num2/$num1;// 这里注意顺序,栈是先进后出,所以$num2是被除数
    if ($op==&#39;+&#39;) $re = $num2+$num1;
    if ($op==&#39;-&#39;) $re = $num2-$num1;
    array_push($num_arr, $re);
  }
}
// 获取优先级
function priority($str){
  if ($str == &#39;*&#39; || $str == &#39;/&#39;){
    return 1;
  } else {
    return 0;
  }
}
// 判断是否是运算符
function isOper($oper){
  $oper_array = array(&#39;+&#39;,&#39;-&#39;,&#39;*&#39;,&#39;/&#39;);
  if (in_array($oper, $oper_array)){
    return true;
  }
  return false;
}

Laufergebnisse:

10+6*2-18/2-2 = 11

[Empfohlenes Lernen: „PHP-Video-Tutorial“]

Das obige ist der detaillierte Inhalt vonSo implementieren Sie vier arithmetische Operationen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn