1 回答
TA贡献1804条经验 获得超3个赞
问题在于array_search()执行松散的比较。当 的元素$components是数字时,它会将搜索字符串转换为数字,然后再进行比较。看起来不像数字的字符串被转换为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 关注
- 112 浏览
添加回答
举报