Неправильный строковой калькулятор
Есть функция, которая считает число из строки. Проверял при помощи 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 че за бред?
Источник: Stack Overflow на русском