我遇到过这种情况,可能是代码中的逻辑错误。
这是我的代码
foreach ($options as $option) {
if (($option['max_value'] > 0) && $total_value <= $option['max_value']) {
$selected_options[] = $option['option_id'];
continue;
}
if (($option['min_value'] > 0) && $total_value >= $option['min_value']) {
$selected_options[] = $option['option_id'];
}
}
这很好用。但是,如果我替换(这是我之前做的,所以逻辑错误)
if(($option['min_value'] > 0 ) ..... ) with
if(!empty($option['min_value']) .... ) same for checking max_value.
但问题仅在于检查min_value
它的处理0.0000不是空的,所以我没有得到预期的输出。有人可以解释一下我的错误吗?
$ options值来自数据库,我有2行
min_value = 0.0000 max_value = 20.0000
min_value = 21.0000 max_value = 0.0000
谢谢!
谢谢大家!!这是一个吸取的教训!!!
答案 0 :(得分:3)
您必须阅读有关empty
的手册 0.0000
不是数字,而是字符串。
答案 1 :(得分:0)
if(!empty($option['min_value']) .... )
肯定会把它视为非空的。
根据手册,empty()确定变量是否被视为空。如果变量不存在或者其值等于FALSE,则该变量被视为空。
0.0000
是一个不能被视为空的字符序列。
答案 2 :(得分:0)
因为变量中的值是从数据库中提取的,所以该值将被视为字符串。 如果变量中的值为0.0(浮点数/数字)或0(数字)或'0'(字符串),则empty()将仅返回true 所以'0.0'(字符串)将返回false。
答案 3 :(得分:0)
只需将float的类型更改为int
empty((int)$ model ['product_cost'])这将返回false,即使该值为0.0