我正在用 JS 创建一个计算器,但计算是用 PHP 进行的。计算器必须能够在不使用 eval() 或类似技巧的情况下处理超过 1 个运算符(例如 1+2*3-4/5)。
经过大量搜索,我最终得到了这个:
if (isset($_POST)) {
$equation = $_POST["textview"];
}
$stored = $equation;
$components = preg_split('~([*/%+-])~', $stored, NULL, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
while (($index = array_search('*', $components)) !== false) {
array_splice($components, $index - 1, 3, $components[$index - 1] * $components[$index + 1]);
}
while (($index = array_search('/', $components)) !== false) {
array_splice($components, $index - 1, 3, $components[$index - 1] / $components[$index + 1]);
}
while (($index = array_search('%', $components)) !== false) {
array_splice($components, $index - 1, 3, fmod($components[$index - 1], $components[$index + 1]));
}
while (($index = array_search('+', $components)) !== false) {
array_splice($components, $index - 1, 3, $components[$index - 1] + $components[$index + 1]);
}
while (($index = array_search('-', $components)) !== false) {
array_splice($components, $index - 1, 3, $components[$index - 1] - $components[$index + 1]);
}
echo current($components);
它似乎工作得很好,除了一个问题:当计算结果为 0 时,它给了我一个错误,并且没有结束“while”循环
Notice: Undefined offset: -1 in C:\xampp\htdocs\***************\component\calculation.php on line 26
Notice: Undefined offset: 1 in C:\xampp\htdocs\****************\component\calculation.php on line 26
在这种情况下,第 26 行将是减法(进行 1-1 运算),但它发生在所有其他应该返回 0 的计算中。
我不知道它为什么会发生以及如何解决它,所以如果有人可以帮助我,那就太好了。
狐的传说