Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция для вычисления примера в переменной

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
polger
Отправлено: 03 Апреля, 2016 - 22:59:09
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Существует ли функция способная вычислить результат:


Что бы ответ был 29

(Отредактировано автором: 03 Апреля, 2016 - 22:59:54)

 
 Top
Flash_PR
Отправлено: 04 Апреля, 2016 - 17:39:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




polger пишет:
Существует ли функция способная вычислить результат:

Да, но она секретная.....)
PHP:
скопировать код в буфер обмена
  1.  
  2. function foo(){
  3. return 53-12*2;
  4. }
  5.  


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
Prizma
Отправлено: 04 Апреля, 2016 - 17:40:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




polger пишет:
Существует ли функция способная вычислить результат:

в стандартных средствах языка такой функции нет, но ее можно написать, конкретно для этого примера (целые числа, 2 операции - вычитание, умножение) вот:
PHP:
скопировать код в буфер обмена
  1. $str = '53-12*2';
  2.  
  3. function result($str)
  4. {
  5.         $ar = explode('-', $str);
  6.         $re = 0;
  7.         $first = true;
  8.         foreach($ar as $v) {
  9.                 if(strpos($v, '*')) {
  10.                         $ar2 = explode('*', $v);
  11.                         $v = $ar2[0];
  12.                         for($i = 1; $i < count($ar2); $i++) {
  13.                                 $v *= $ar2[$i];
  14.                         }
  15.                 }
  16.                 if($first) {
  17.                         $re = $v;
  18.                         $first = false;
  19.                 }else{
  20.                         $re -= $v;
  21.                 }
  22.         }
  23.         return $re;
  24. }
  25.  
  26. echo result($str);


Если тебе нужна функция решающие любые примеры погугли должны такие быть
 
My status
 Top
polger
Отправлено: 04 Апреля, 2016 - 18:56:43
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Prizma пишет:
в стандартных средствах языка такой функции нет

Спасибо большое за ответ. Я бы даже Спасибнул, но мало кармы =) Вот почему бы разработчикам php не создать стандартную функцию для решения любых простых арифметических действий как в моём случае...
 
 Top
difight
Отправлено: 04 Апреля, 2016 - 20:22:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




Это щас прикол такой был или я чё то не пойму ?
 
My status
 Top
polger
Отправлено: 04 Апреля, 2016 - 20:33:39
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




difight пишет:
Это щас прикол такой был или я чё то не пойму ?

Поясни
 
 Top
andrewkard
Отправлено: 04 Апреля, 2016 - 23:16:14
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Еще один вариант:
PHP:
скопировать код в буфер обмена
  1.  
  2. $n = '54-12*2*1/2+1';
  3.  
  4. function calculate($str){
  5.     preg_match_all('/\d+/',$str,$matches);
  6.     $numbers = $matches[0];
  7.     preg_match_all('/[\*\/\+-]+/',$str,$matches);
  8.     $signs = $matches[0];
  9.  
  10.     if (empty($signs)) return $str;
  11.  
  12.     foreach ($signs as $index => $operator){
  13.         switch($operator){
  14.             case '*':
  15.                 $numbers[$index+1] = $numbers[$index] * $numbers[$index+1];
  16.                 unset($signs[$index]);
  17.                 break;
  18.             case '/':
  19.                 $numbers[$index+1] = $numbers[$index] / $numbers[$index+1];
  20.                 unset($signs[$index]);
  21.                 break;
  22.         }
  23.     }
  24.  
  25.     $result  = 0;
  26.     $count = count($numbers);
  27.     foreach ($signs as $index => $operator){
  28.         if ($result != 0) $numbers[$index] = $result;
  29.         for ($i = $index+1; $i <= $count;$i++){
  30.             if (!empty($numbers[$i])){
  31.                 $numbers[$index+1] = $numbers[$i];
  32.                 break;
  33.             }
  34.         }
  35.  
  36.         switch($operator){
  37.             case '-': $result = $numbers[$index] - $numbers[$index+1]; break;
  38.             case '+': $result = $numbers[$index] + $numbers[$index+1]; break;
  39.         }
  40.     }
  41.  
  42.     return $result;
  43. }
  44.  
  45.  
  46. echo calculate($n);
  47.  
  48.  
 
 Top
Prizma
Отправлено: 04 Апреля, 2016 - 23:51:36
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




polger пишет:
Вот почему бы разработчикам php не создать стандартную функцию для решения любых простых арифметических действий как в моём случае...

difight пишет:
Это щас прикол такой был или я чё то не пойму ?
polger пишет:
Поясни

Есть инфа, что числа проще записывать в отдельные переменные и производить действия между переменными... невозможно предусмотреть функцию для каждого частного случая.

не знаю, что там у Вас за код, но уверен, что можно обойтись без таких извращений...
Нормальные вычисления выглядят как-то так...
PHP:
скопировать код в буфер обмена
  1. $x = 53;
  2. $y = 12;
  3. $z = 2;
  4. echo $x-$y*$z;
 
My status
 Top
marat-dev
Отправлено: 05 Апреля, 2016 - 05:14:49
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




polger пишет:
Существует ли функция способная вычислить результат:


Что бы ответ был 29

PHP:
скопировать код в буфер обмена
  1.  
  2. $n = "5+5";
  3. eval("\$result = $n;");
  4. echo $result;
  5.  

(Отредактировано автором: 05 Апреля, 2016 - 06:03:59)

 
 Top
polger
Отправлено: 05 Апреля, 2016 - 07:13:38
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




marat-dev пишет:
Что бы ответ был 29

Супер. Спасибо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB