Có rất nhiều thư viện thẩm toán cho PHP. Tìm kiếm trên web nhanh chóng bật lên this one.
Viết phân tích cú pháp riêng của bạn cũng là một lựa chọn, và nếu nó chỉ là số học cơ bản nó không nên quá khó khăn. Với các nguồn tài nguyên ngoài kia, tôi sẽ tránh xa điều này.
Bạn có thể mất một cách tiếp cận đơn giản và sử dụng eval. Hãy cẩn thận để khử trùng đầu vào của bạn trước. Trên eval docs's page, có các nhận xét có mã để thực hiện điều đó. Dưới đây là một ví dụ:
Tuyên bố từ chối trách nhiệm: Tôi biết eval chỉ là lỗi chính tả của điều ác, và đó là một điều kinh khủng khủng khiếp và tất cả những điều đó. Nếu được sử dụng đúng, nó có sử dụng, mặc dù.
<?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 (hoặc với preg_replace_callback) ... theo thứ tự đó. nhưng được cảnh báo, eval có thể nguy hiểm, không chỉ khớp trên [] hoặc ai đó có thể thêm mã vào []. – Rufinus
Bạn có thể 'eval()' báo cáo, đó là một nguy cơ bảo mật mặc dù. – Robus