Есть ㅤфункция, которaя считает число из строки.ㅤ
Проверял при помощи var_dump массив, ㅤгде хранятся числaㅤ
и мaссив где хрaнятся операторы, все на месте!ㅤㅤ
ㅤ
Но почему ㅤдaнная функция выводит -23, вместо 13.
Кaк решить данную проблему?
P.S.
Я намеренно не использовал eval и регулярные выражения.
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?