2

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

这是我的代码

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. 最小值 = 0.0000 最大值 = 20.0000

  2. 最小值 = 21.0000 最大值 = 0.0000

谢谢!!

谢谢你们!!这是一个教训!!!

4

4 回答 4

4

您必须阅读有关空的手册

0.0000不是数字而是字符串。

于 2013-07-02T09:18:07.377 回答
0

if(!empty($option['min_value']) .... )肯定会将其视为非rempty。

根据手册,empty() 确定一个变量是否被认为是空的。如果变量不存在或其值等于 FALSE,则认为该变量为空。

0.0000是一个不能被认为是空的字符序列。

于 2013-07-02T09:20:56.103 回答
0

因为变量中的值是从数据库中提取的,所以该值将被视为字符串。只有当变量中的值为 0.0(浮点数/数字)或 0(数字)或 '0'(字符串)时,empty() 才会返回 true,因此 '0.0'(字符串)将返回为 false。

于 2013-07-02T09:41:33.400 回答
0

只需将 float 类型更改为 int

empty((int)$model['product_cost']) 即使值为 0.0,它也会返回 false

于 2018-11-26T10:39:26.987 回答