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);
- 1 回答
- 0 關注
- 142 瀏覽
添加回答
舉報