Php 确定零、零(双精度)和值(双精度)之间的差异

Php 确定零、零(双精度)和值(双精度)之间的差异,php,mysqli,Php,Mysqli,由于NULL和0在php中都返回为空,因此我很难根据mysqli记录集的双类型结果来确定两者之间的差异 我尝试转换每个场景,以返回更易于管理的返回字符串: if($val == 0){ echo "No Cost Option"; } elseif (empty($val)){ echo "UNCOSTED"; } else { echo "£ ".number_format($val ,2); } 从理论上讲,如果DB中存在零,它应该返回“无成本选项” 同样,如果DB返回N

由于NULL和0在php中都返回为空,因此我很难根据mysqli记录集的双类型结果来确定两者之间的差异

我尝试转换每个场景,以返回更易于管理的返回字符串:

if($val == 0){
   echo "No Cost Option";
} elseif (empty($val)){
   echo "UNCOSTED";
} else {
   echo "£ ".number_format($val ,2);
}
从理论上讲,如果DB中存在零,它应该返回“无成本选项”

同样,如果DB返回NULL,它应该返回“UNCOSTED”

最后,如果有一个值,它将简单地格式化该值


目前(而且不正确),Null和0都被以相同的方式处理,因此都被视为“无成本选项”。

如果您严格希望与数字0进行比较,则应使用=

if($val === 0){
   echo "No Cost Option";
} elseif (empty($val)){
   echo "UNCOSTED";
} else {
   echo "£ ".number_format($val ,2);
}
使用===可以获得严格相同的比较(类型和值)

如果你想更精确

0、null、false、“0”、[](空数组)和更多(请参阅)的值相等。 所以


但是如果您将它们与====

进行比较,则它们不是。您可以严格地将它们与
空值进行比较。如果严格地与integer进行比较,它可能不起作用,因为结果将是一个数字字符串

if($val === 0){
   echo "No Cost Option";
} elseif (empty($val)){
   echo "UNCOSTED";
} else {
   echo "£ ".number_format($val ,2);
}
颠倒if语句顺序,首先检查null

if (null === $val) {
    echo "UNCOSTED";
} elseif ($val == 0) {
    echo "No Cost Option";
} else {
    echo "£ ".number_format($val, 2);
}

@Dharman-不知道-谢谢。仅供参考mysqli的结果将始终以字符串或空值的形式出现。如果比较
'0'==0
,它将返回false.Hmmm-如果值为零,此答案实际上会导致问题。它返回“未编码”@达曼他的答案似乎是一致的。这就是我所说的,当我说0=='0'==false,但当使用===时返回false,它是零(0)还是“0”,这是不一样的。您在问题中要求的是零,而不是“0”,这可能是因为@Dharman说mysqli的结果总是以字符串或字符串的形式出现null@DylanKas这确实是一个零(0),而不是一个“0”。