亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP計算器:答案為0時未定義溢出

PHP計算器:答案為0時未定義溢出

PHP
森欄 2022-01-14 16:09:00
我正在用 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 26Notice: Undefined offset: 1 in C:\xampp\htdocs\****************\component\calculation.php on line 26在這種情況下,第 26 行將是減法(進行 1-1 運算),但它發生在所有其他應該返回 0 的計算中。我不知道它為什么會發生以及如何解決它,所以如果有人可以幫助我,那就太好了。
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

問題在于array_search()執行松散的比較。當 的元素$components是數字時,它會將搜索字符串轉換為數字,然后再進行比較??雌饋聿幌駭底值淖址晦D換為0,因此array_search("-", [0])返回0而不是false(try var_dump('-' == 0, '-' === 0))。


array_search有一個可選strict參數,使其進行嚴格比較(如===而不是==)。將此添加到所有array_search調用中可以解決問題。


$stored = "1-1";

$components = preg_split('~([*/%+-])~', $stored, NULL, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

while (($index = array_search('*', $components, true)) !== false) {

    array_splice($components, $index - 1, 3, $components[$index - 1] * $components[$index + 1]);

}

while (($index = array_search('/', $components, true)) !== false) {

    array_splice($components, $index - 1, 3, $components[$index - 1] / $components[$index + 1]);

}

while (($index = array_search('%', $components, true)) !== false) {

    array_splice($components, $index - 1, 3, fmod($components[$index - 1], $components[$index + 1]));

}

while (($index = array_search('+', $components, true)) !== false) {

    array_splice($components, $index - 1, 3, $components[$index - 1] + $components[$index + 1]);

}

while (($index = array_search('-', $components, true)) !== false) {

    array_splice($components, $index - 1, 3, $components[$index - 1] - $components[$index + 1]);

}


echo current($components);


查看完整回答
反對 回復 2022-01-14
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號