fork download
  1. <?php
  2.  
  3. $problem = "123/14+234-34.5*2=";
  4.  
  5. $numbers = array();
  6. $actions = array();
  7. preg_match_all("/[0-9]{1,}[.]?[0-9]{0,}/", $problem, $numbers); // массив чисел, использующихся в примере
  8. preg_match_all("#[+]|[-]|[*]|[/]#", $problem, $actions); // и массив действий с ними
  9.  
  10. foreach ($numbers[0] as $value) {
  11. if (preg_match("/[.]/", $value) > 0) { // если число содержит точку, используется тип float
  12. $mixedNumbers[] = floatval($value);
  13. }
  14. else {
  15. $mixedNumbers[] = intval($value);
  16. }
  17. }
  18.  
  19. for ($i = 0; $i < count($actions[0]); $i++) {
  20. if ($i == 0) {
  21. $result = $mixedNumbers[0];
  22. }
  23. echo "Первое число: $result" . " Действие: " . "[ " . $actions[0][$i] . " ]" . " Второе число: " . $mixedNumbers[$i+1];
  24. if ($actions[0][$i] == "/") {
  25. $result = $result / $mixedNumbers[$i+1];
  26. }
  27. elseif ($actions[0][$i] == "*") {
  28. $result = $result * $mixedNumbers[$i+1];
  29. }
  30. elseif ($actions[0][$i] == "+") {
  31. $result = $result + $mixedNumbers[$i+1];
  32. }
  33. else {
  34. $result = $result - $mixedNumbers[$i+1];
  35. }
  36. echo " Равно: $result\n";
  37. }
  38.  
  39. echo "$problem" . $result;
Success #stdin #stdout 0.01s 24040KB
stdin
Standard input is empty
stdout
Первое число: 123 Действие: [ / ] Второе число: 14 Равно: 8.7857142857143
Первое число: 8.7857142857143 Действие: [ + ] Второе число: 234 Равно: 242.78571428571
Первое число: 242.78571428571 Действие: [ - ] Второе число: 34.5 Равно: 208.28571428571
Первое число: 208.28571428571 Действие: [ * ] Второе число: 2 Равно: 416.57142857143
123/14+234-34.5*2=416.57142857143