пользователю разрешено ввести любое математическое уравнение, они, как (с одной переменной):процесса математические уравнения в РНР
x + 5
1 - x/2
(x/3) * (56/13)
Они хранятся в виде строк в базы данных. Когда они извлекаются, мне нужно подставить «x» для числа и проверить значение уравнения.
Как я мог это сделать?
Я рассматривал возможность написания анализатора, чтобы деконструировать строки и превратить их в уравнения, однако это звучит дорого и проблематично. Другой вариант - передать их через eval (но я не большой поклонник использования eval, если могу помочь).
Любые идеи?
UPDATE: Я также должен иметь возможность получить логическое значение чего-то вроде «(x> 5)». Это невозможно с evalMath
ОБНОВЛЕНИЕ 2: Мне нужно сжечь лотов из них вторые. Я искал eval в php, но не могу заставить его возвращать логическое значение для (5> 4), но я заметил, что js сделает это ... возможно, мне следует изучить node.js ...
ОБНОВЛЕНИЕ 3: После поразвлечься попробовать Node.js (и заставить его работать) я вернулся и получил Eval работать в PHP см: Can php eval return a boolean value?
Так что я пойду с Eval с очень очень хардкорным фильтром на входе пользователя.
Если вам нужно сделать более сложные вещи, WolframAlpha offers an API для разработчиков. – TheMagician
@ TheMagician Хорошая идея, но, к сожалению, их нужно уволить очень часто (тысячи из них в секунду), поэтому внешний api не будет работать. –