<?php

error_reporting(-1);
mb_internal_encoding('utf-8');

/*Написать программу, имитирующую работу обычного кнопочного калькулятора. Калькулятору на вход даётся строка, содержащая целые числа и знаки "+", "-", "*", "=". По знаку "=" калькулятор выводит ответ. 

Поядок действий не соблюдается (как и в обычном калькуляторе), т.е. 2+2*2= выведет 8.
*/

$exampleError_1 = "17+34d=";
$exampleError_2 = "7**134=";
$exampleError_3 = "346-23";
$exampleError_4 = "+346-2=";
$exampleError_5 = "7++134=";
$exampleError_6 = "=987*13=";
$exampleError_7 = "65437=3654=";
$exampleError_8 = "6437=364-95=";

$example_0 = "17+1981=";//1998
$example_1 = "678-34=";//644
$example_2 = "43*9=";//387
$example_3 = "30*7=";//210
$example_4 = "90000-220=";//89780
$example_5 = "24-33=";//-9
$example_6 = "1+2+3*10-5+6-7+8*2=";//124

$example_10 = "2+2*2=";//8
$example_11 = "243+6743-78*2=";//13816

//функция-калькулятор
function calc ($example)
{//начинает ф-цию
 $number = 0; //Текущее число, которое набирает пользователь
 $result = 0; //Результат предыдущих действий
 $op = ""; //Предыдущая операция (+,-,*)
 $inputLength = mb_strlen($example);//длина строки
 $correctExample = 1;//флаг сбрасывется, если в записи примера ошибка
 $notSign = 0;//флаг сбрасывется, если символ является арифметическим знаком
 for ($i = 0; $i < $inputLength; $i++)
 {//начинает for
 $char = mb_substr($example, $i, 1);//mb_substr возвращает часть строки $example, начиная с $i-го символа, длина возвращаемой субстроки 1 символ
 if ($char == "*" || $char == "+" || $char == "-" || $char == "=")
 {//начинает if
  $correctExample = $notSign * $correctExample;//если подряд 2 арифметических знака или если пример начинается с арифметического знака, то пример неправильный
  $notSign = 0;
  if ($op == "*") $result = $result * $number;     //если умножение
   elseif ($op == "+") $result = $result + $number;//если сложение
   elseif ($op == "-") $result = $result - $number;  //если вычитание
   elseif ($op == "") $result = $number;  //если первое число в прмере
   else $correctExample = 0;  //если "=" внутри примера
  $op = $char;//обновляем арифметический оператор
  $number = 0;//сбрасываем текущее число
 }//заканчивает if
 elseif (is_numeric($char))//is_numeric проверяет, является ли $char числом (в том числе строкой из цифр)
 {//начинает elseif
  $number = ($number * 10) + intval($char);//intval преобразует строку из цифр в число
  $notSign = 1;//символ не является арифметическим знаком
 }//заканчивает elseif
 else
  $correctExample = 0;//если символ не является арифметическим знаком или цифрой, то пример неправильный
 }//заканчивает for
 if (($correctExample != 0) && ($op == "="))//если последний знак не "=", то пример неправильный
  echo "Отвтет: {$example}{$result}\n";
 else
  echo "Неправильный пример: {$example}\n";
}//заканчивает ф-цию

calc ($example_0);//1998
calc ($example_1);//644
calc ($example_2);//387
calc ($example_3);//210
calc ($example_4);//89780
calc ($example_5);//-9
calc ($example_6);//124

calc ($example_10);//8
calc ($example_11);//13816

calc ($exampleError_1);
calc ($exampleError_2);
calc ($exampleError_3);
calc ($exampleError_4);
calc ($exampleError_5);
calc ($exampleError_6);
calc ($exampleError_7);
calc ($exampleError_8);

?>