!empty()结果为0.0000

时间:2013-07-02 09:13:17

标签: php if-statement is-empty

我遇到过这种情况,可能是代码中的逻辑错误。

这是我的代码

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行

  1. min_value = 0.0000 max_value = 20.0000

  2. min_value = 21.0000 max_value = 0.0000

  3. 谢谢!

    谢谢大家!!这是一个吸取的教训!!!

4 个答案:

答案 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