fork(2) download
  1. <?php
  2. $input = "1+2*3-8/2+4*4-6/3";
  3.  
  4. $tester = '#[\d\+\-*/\s]#';
  5. for ($i=0; $i<mb_strlen($input); $i++) {
  6. if (!preg_match($tester, mb_substr($input, $i, 1))) {
  7. echo "Формат неверен";
  8. exit();
  9. }
  10. }
  11.  
  12. echo "Вычисляем значение выражения: $input\n";
  13.  
  14. $devider = '#(\+|-|\*|=|/)#';
  15. $parts = preg_split($devider, $input,0, PREG_SPLIT_DELIM_CAPTURE);
  16. $length = count($parts);
  17.  
  18. print_r($parts);
  19.  
  20. for ($i=0; $i<count($parts); $i++) {
  21. if ($parts[$i] == "*") {
  22. echo "Выполняем умножение {$parts[$i-1]} * {$parts[$i+1]}\n";
  23. $temp = $parts[$i-1] * $parts[$i+1];
  24. $parts[$i-1] = $temp;
  25. array_splice($parts, $i, 2);
  26. }
  27. }
  28. print_r($parts);
  29.  
  30. for ($i=0; $i<count($parts); $i++) {
  31. if ($parts[$i] == "/") {
  32. echo "Выполняем деление {$parts[$i-1]} / {$parts[$i+1]}\n";
  33. $temp = $parts[$i-1] / $parts[$i+1];
  34. $parts[$i-1] = $temp;
  35. array_splice($parts, $i, 2);
  36. }
  37. }
  38.  
  39. print_r($parts);
  40.  
  41. for ($i=0; $i<count($parts); $i++) {
  42. if ($parts[$i] == "+") {
  43. echo "Выполняем сложене {$parts[$i-1]} + {$parts[$i+1]}\n";
  44. $temp = $parts[$i-1] + $parts[$i+1];
  45. $parts[$i-1] = $temp;
  46. array_splice($parts, $i, 2);
  47. }
  48. }
  49.  
  50. print_r($parts);
  51.  
  52. for ($i=0; $i<count($parts); $i++) {
  53. if ($parts[$i] == "-") {
  54. echo "Выполняем вычетание {$parts[$i-1]} - {$parts[$i+1]}\n";
  55. $temp = $parts[$i-1] - $parts[$i+1];
  56. $parts[$i-1] = $temp;
  57. array_splice($parts, $i, 2);
  58. }
  59. }
  60.  
  61. print_r($parts);
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
Вычисляем значение выражения: 1+2*3-8/2+4*4-6/3
Array
(
    [0] => 1
    [1] => +
    [2] => 2
    [3] => *
    [4] => 3
    [5] => -
    [6] => 8
    [7] => /
    [8] => 2
    [9] => +
    [10] => 4
    [11] => *
    [12] => 4
    [13] => -
    [14] => 6
    [15] => /
    [16] => 3
)
Выполняем умножение 2 * 3
Выполняем умножение 4 * 4
Array
(
    [0] => 1
    [1] => +
    [2] => 6
    [3] => -
    [4] => 8
    [5] => /
    [6] => 2
    [7] => +
    [8] => 16
    [9] => -
    [10] => 6
    [11] => /
    [12] => 3
)
Выполняем деление 8 / 2
Выполняем деление 6 / 3
Array
(
    [0] => 1
    [1] => +
    [2] => 6
    [3] => -
    [4] => 4
    [5] => +
    [6] => 16
    [7] => -
    [8] => 2
)
Выполняем сложене 1 + 6
Выполняем сложене 4 + 16
Array
(
    [0] => 7
    [1] => -
    [2] => 20
    [3] => -
    [4] => 2
)
Выполняем вычетание 7 - 20
Array
(
    [0] => -13
    [1] => -
    [2] => 2
)