@17aPaBo3uK

Как в php запустить математические операции из строки?

Всем привет.
Есть такой код:
$formula = '{var1} / {var2}'; // можно сложить, умножить, делить и т.д.
$var1 = 100; // тип может быть float
$var2 = 2; // тип может быть float
$phrase = array("{var1}", "{var2}");
$healthy = array((float)$var1, (float)$var2);
$result = str_replace($phrase, $healthy, $formula);

Значение $result получаю в виде строки 100 / 2;
Как получить результат после математической операции?
  • Вопрос задан
  • 1078 просмотров
Решения вопроса 1
sandu2d
@sandu2d
Человек
А ещё можно использовать нормальный пакет и не изобретать своё колесо:
https://packagist.org/packages/denissimon/formula-...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ART_CORP
Hard work
@ksnk
Вот - без евалов и смс... Хотя неплохо бы проверить корректность получающегося кода. В 7 php есть контроль ошибок синтаксиса. Прикручивается факультативно.. Еще неплохо бы контролировать что выполняется и откуда оно берется.
$vars=[
    'var1'=>100,
    'var3'=>2
];

echo execute('{var1}/{var3}', $vars);


function execute($expr,$vars){

    $functionname='_'.md5($expr);
    if(!function_exists($functionname)){
        $filename=$functionname.'.tmp.php';
        if(!file_exists($filename)) {
            $php_expr = preg_replace_callback('/{(.*?)}/', function ($m) use ($vars) {
                if (isset($vars[$m[1]]))
                    return '$' . $m[1];
                else
                    return $m[0];
            }, $expr);

            file_put_contents($functionname . '.tmp.php', sprintf('<' . '?php
        function %s($vars){
            extract($vars);
            return %s;
        }
', $functionname, $php_expr));
        }
        include_once($functionname.'.tmp.php');
    }
    return $functionname($vars);

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 10:00
10000 руб./за проект
29 мар. 2024, в 09:59
750 руб./в час
29 мар. 2024, в 09:55
50000 руб./за проект