Например
$var = '10/2';
Есть ли способ для меня вывести значение 5 из этого легко?
Так что-то вроде этого:
$foo = ($var) + 5;
я хочу $foo
иметь значение 10?
В настоящее время лучший способ, которым я знаю, это взорвать $var
а затем разделить $var[0]
от $var[1]
, Есть ли более быстрый способ?
Другой способ спросить; Есть ли способ заставить систему обрабатывать ’10 / 2 ‘как уравнение вместо строки?
Может быть, вы можете использовать решение, подобное этому
$foo = eval('return '.$var +5 .';');
print $foo;
eval требуется строка кода .. чтобы вы могли построить правильную строку кода
eval()
либо назначить на месте или return
:
eval("\$foo = ($var) + 5;");
$foo = eval("return ($var) + 5;");
Обо всем по порядку, EVAL ОПАСНО И НЕ ДОЛЖНО ИСПОЛЬЗОВАТЬСЯ, ЕСЛИ ВЫ НЕ ЗНАЕТЕ, ЧТО ВЫ ДЕЛАЕТЕ! Как дополнение к этому, вы не знаете, что делаете. Независимо от того, насколько вы опытны как программист, когда дело доходит до eval, просто предполагайте, что вы не знаете, что делаете. Поверьте мне, в конечном итоге ваше здравомыслие поблагодарит вас.
Что касается вашей проблемы, вы в основном спрашиваете, как написать парсер уравнений. Написание полноценного, который может обрабатывать все случаи правильного ввода (и надежно идентифицировать неверный ввод), — это гораздо более сложная задача, чем вы могли бы сначала подумать, поэтому, если вам действительно нужно проанализировать строковые уравнения, может быть, лучше поискать библиотека, которая сделает это за вас, потому что есть вероятность, что тот, кто написал библиотеку, подумал о многих вещах, которые вы не сделали, таких как обработка приоритет оператора и как скобки могут изменить его, как передать строки в научной нотации и т. д.
Один из ваших комментариев предлагает использовать PHP Math Parser. Я никогда не использовал его лично, но я знаю автора по репутации достаточно хорошо, чтобы верить, что это надежная библиотека.
Если ваш вариант использования всегда будет таким же простым, как и ваш пример, вы можете просто разбить строку и обработать полученные фрагменты.
$parts = explode ("/", $var);
$foo = $parts[0] / $parts[1];