Неправильный строковой калькулятор

Рейтинг: 0Ответов: 0Опубликовано: 18.03.2023

Есть функция, которая считает число из строки. Проверял при помощи var_dump массив, где хранятся числа и массив где хранятся операторы, все на месте!

Но почему данная функция выводит -23, вместо 13. Как решить данную проблему?

function calc($value){
  
  $str_length = strlen($value);
  $str_array = [];
  $check_operators = ["+", "-", "*", "/"];
 
 
  for($a = 0; $a < $str_length; $a++){
  $str_array[] = $value[$a];
  }
 
 
  $final_array =[];
  $final_operator = [];
  $token = "";
  
  foreach($str_array as $items){    
    
    if ($items >= '0' && $items <= '9') {
    $token .= $items;
    } 
    else{
    array_push($final_array, $token);
    $token = '';
    }
    
    if(in_array($items, $check_operators)){ 
    $final_operator[] = $items; 
    }         
 
  }  
 
 
array_push($final_array, $token); 
 
  
 foreach($final_operator as $items){           
        
    $result = match($items){   
      "+" => function($b, $a, $calc_array):array{   
       array_push($calc_array, $a + $b);  
       return $calc_array;
       },  
   
       "-" => function($b, $a, $calc_array):array{   
       array_push($calc_array, $a - $b);  
       return $calc_array;
       },  
    
      "*" => function($b, $a, $calc_array):array{   
      array_push($calc_array, $a * $b);  
      return $calc_array;
      },  
    
      "/" => function($b, $a, $calc_array):array{   
      array_push($calc_array, $a / $b);  
      return $calc_array;
      },
    }; 
    
  $final_array = $result(array_pop($final_array), array_pop($final_array), $final_array);         
  }
 
 
return array_pop($final_array);
}
 
 
echo calc("5+5+5+2+2+2+2-10")."<br>"; //-23 че за бред?

Ответы

Ответов пока нет.