Решать уравнения, которые включают в себя троичный оператор без eval ()?

В настоящее время я работаю над приложением PHP, которое должно решать уравнения, которые могут иметь или не иметь троичный оператор.

Например, после замены моих переменных в уравнении нам остается следующая строка:

$eq = '(3.07 > 10 ? 1.93 * 10 : 3.07 * 1.93)';

Ранее мы использовали eval () (что, очевидно, работало бы), но перешли на пакет EOS из PHP Classes (https://www.phpclasses.org/package/2055-PHP-Solve-equations-with-multiple-variables.html) из-за проблем безопасности с eval ().

Класс EOS не интерпретирует троичный оператор, и я не хочу возвращаться к eval (), так каковы мои варианты здесь? Есть ли лучшая библиотека PHP EOS, которую я могу где-нибудь использовать?

1

Решение

Предполагая, что есть только одна троичная, вы можете разбить строку на отдельные части троичного выражения и оценить части по отдельности.

$eq = '3.07 > 10 ? 1.93 * 10 : 3.07 * 1.93';

preg_match('/(.+)\?(.+):(.+)/', $eq, $parts);

if (isset($parts[3])) {
$result = Parser::solve($parts[1]) ? Parser::solve($parts[2]) : Parser::solve($parts[3]);
} else {
$result = Parser::solve($eq);
}

Если есть более трех троичных, вы, вероятно, могли бы сделать это, если бы вы были лучше в регулярных выражениях, чем я. 🙂

Я признаю, что этот подход немного наивен, я могу думать о различных вещах, которые довольно легко сломают его, например, троичное подвыражение в скобках, но оно может подойти для простых примеров, подобных приведенному в вашем вопросе.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]