PHP - Решения Уравнений, которые включают троичный оператор без eval ()? - PullRequest
0 голосов
/ 24 августа 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 24 августа 2018

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

$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);
}

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

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

...