В настоящее время я работаю над приложением 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, которую я могу где-нибудь использовать?
Предполагая, что есть только одна троичная, вы можете разбить строку на отдельные части троичного выражения и оценить части по отдельности.
$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);
}
Если есть более трех троичных, вы, вероятно, могли бы сделать это, если бы вы были лучше в регулярных выражениях, чем я. 🙂
Я признаю, что этот подход немного наивен, я могу думать о различных вещах, которые довольно легко сломают его, например, троичное подвыражение в скобках, но оно может подойти для простых примеров, подобных приведенному в вашем вопросе.
Других решений пока нет …