Istnieje wiele bibliotek oceny matematyki dla PHP. Szybkie wyszukiwanie w Internecie pojawia się this one.
pisanie własnego parsera jest również opcja, a jeśli to tylko podstawowa arytmetyka nie powinno być zbyt trudne. Dzięki tym zasobom trzymałbym się z dala od tego.
Można przyjąć prostsze podejście i użyć eval. Bądź ostrożny, aby najpierw odfiltrować dane wejściowe. Na eval docs's page znajdują się komentarze z kodem do tego. Oto jeden przykład:
Nota prawna: Wiem, że eval to po prostu błędna pisownia zła, a to straszna rzecz, i to wszystko. Jeśli jest używany, ma swoje zastosowania.
<?php
$test = '2+3*pi';
// Remove whitespaces
$test = preg_replace('/\s+/', '', $test);
$number = '(?:\d+(?:[,.]\d+)?|pi|π)'; // What is a number
$functions = '(?:sinh?|cosh?|tanh?|abs|acosh?|asinh?|atanh?|exp|log10|deg2rad|rad2deg|sqrt|ceil|floor|round)'; // Allowed PHP functions
$operators = '[+\/*\^%-]'; // Allowed math operators
$regexp = '/^(('.$number.'|'.$functions.'\s*\((?1)+\)|\((?1)+\))(?:'.$operators.'(?2))?)+$/'; // Final regexp, heavily using recursive patterns
if (preg_match($regexp, $q))
{
$test = preg_replace('!pi|π!', 'pi()', $test); // Replace pi with pi function
eval('$result = '.$test.';');
}
else
{
$result = false;
}
?>
preg_match_all + eval + str_replace (lub z preg_replace_callback) ... w tej kolejności. ale bądź ostrzeżony, eval może być niebezpieczny, nie pasuje tylko na [] lub ktoś może dodać kod w []. – Rufinus
Możesz "eval()" instrukcji, to jednak ryzyko bezpieczeństwa. – Robus