我的表字段状态为NULL[默认值],或者为0或1。然后我将var$状态分配给PHP。当值为NULL时,我不想显示图标,当值为0时,显示灰色复选图像,当值是1时,显示绿色复选图像。
问题是,NULL值显示灰色校验图像,0不显示校验图像。不知何故,NULL和0是相似的,但只是在一个方向上。我的意思是,无论我如何有条件地测试var是否为null,不是null,null但不是零,它们都会被错误地解释。这令人困惑。必须有一种简单直接的方法来保持NULL和0的独立性。我得到了价值:
$status = $Card['status']; //from above array.
if ($status == 1) {
$status = '1';
} else if ($status == 0) {
$status = '0';
} else if ($status === NULL) {
$status = 'NULL';
}
然后要显示灰色、绿色或根本没有的图像,我正在尝试这个:
if ($status == '1') {
echo "<img src='../images/status_check_green.png' />";
} else if ($status == '0') {
echo "<img src='../images/porc_check_gray.png' />";
} else if ($status == 'NULL') {
echo "<img src='' />";
}
}
我知道我不需要值周围的",但我正在尝试将所有内容文字化,以强制进行有效的比较。可能不需要有人试图破解我的代码;而是为了阐明如何保持NULL和0分离。我好像错过了一些基本的东西。顺便说一句,当我用PHP变量填充js变量时,它会得到正确的值;他们只是没有像我需要的那样遵循比较。
想法?
HI您的问题是程序顺序还是不类型检查0
(取决于您是否想要捕获false
)
if ($status == 1) {
$status = '1';
} else if ($status == 0) {
$status = '0'; //<--- this runs on null because (null == 0) is true
} else if ($status === NULL) {
$status = 'NULL'; //<--- this block is un-reachable
}
因为0
为null的===
的非类型检查将在该条件下返回true。
请参阅此沙箱和使用$status = null;
的示例
http://sandbox.onlinephpfunctions.com/code/1f3dd9d83d0026aa0f682b61bed2ba858ae285aa
输出:
'0'
如果你把它改成这个
if ($status == 1) {
$status = '1';
} else if ($status === 0) {
$status = '0';
} else if ($status === NULL) {
$status = 'NULL';
}
正如您在这里看到的,使用与$status
相同的设置
http://sandbox.onlinephpfunctions.com/code/d86b0c60c06338d2d6ee1c1fa9d3fa7e08a22663
输出
'NULL'
另一种解决方法是切换它们,使更具体的一个优先。
if ($status == 1) {
$status = '1';
} else if ($status === NULL) {
$status = 'NULL';
} else if ($status == 0) { //I would prefer if(!$status){ but I'm lazy
$status = '0';
}
那么0
将捕获false
以及0
,但不捕获null
,因为它上面的块将首先捕获它。你可以在这里看到最后一个
http://sandbox.onlinephpfunctions.com/code/3028f5826dcede29b14dd8cfc03618ea5830c12c
也输出
'NULL'
干杯!