fork download
  1. <?php
  2.  
  3.  
  4. $input = '10.5+1.5/5*10=';
  5. //Регулярка для поиска в $input числа, которые разделены математическими знаками
  6. $regexpSearchNumbers = '/[+]|-|[*]|\\/|=/';
  7. //Создаем массив с числами
  8. $numbers = preg_split($regexpSearchNumbers, $input, 0, PREG_SPLIT_NO_EMPTY);
  9. //Регулярка для поиска математических знаков, которые разделены цифрами
  10. $regexpSearchMathOperators = '/[0-9]+[.]*[0-9]*/';
  11. //Создаем массив с математическими операторами. Помним, что по условиям регулярки, 0-й элемент будет пустым, если
  12. //первое число положительное, и будет содержать '-', если первое число отрицательное
  13. $mathOperators = preg_split($regexpSearchMathOperators, $input);
  14. //Преобразуем элементы массива $numbers в float
  15. foreach ($numbers as &$n) {
  16. $n = floatval($n);
  17. }
  18. //Проверяем, положительное или отрицательное первое число
  19. if ($mathOperators[0] == "-") {
  20. $result = $numbers[0] * (-1);
  21. } else $result = $numbers[0];
  22.  
  23. //Последовательно разбираем математические действия
  24. for ($i = 0; $i <= count($mathOperators); $i++) {
  25. if ($mathOperators[$i + 1] == '+') {
  26. $result = $result + $numbers[$i + 1];
  27. } elseif ($mathOperators[$i + 1] == '-') {
  28. $result = $result - $numbers[$i + 1];
  29. } elseif ($mathOperators[$i + 1] == '*') {
  30. $result = $result * $numbers[$i + 1];
  31. } elseif ($mathOperators[$i + 1] == '/') {
  32. $result = $result / $numbers[$i + 1];
  33. } elseif ($mathOperators[$i + 1] == '=') {
  34. break;
  35. }
  36. }
  37. var_dump($result);
Success #stdin #stdout 0.02s 24584KB
stdin
Standard input is empty
stdout
float(24)