php我需要null为null,零为零

dcp*_*ham 1 php null

我的表字段状态为NULL [默认],或者它是0或1.然后我分配给PHP var $ status.当值为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';
    } 
Run Code Online (Sandbox Code Playgroud)

然后显示图像灰色,绿色或根本没有我正在尝试这个:

    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='' />";
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我不需要围绕价值观,但我试图将一切都归结为强制有效的比较.可能没有人需要尝试解开我的代码; 但要阐明如何保持NULL和0分开.就像我在这里缺少一些基本的东西.顺便说一句,当我用PHP var填充js var时,它获得正确的值; 他们只是不按照我需要他们的比较.

想法?

Art*_*nix 5

你的问题是程序顺序或不检查类型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
} 
Run Code Online (Sandbox Code Playgroud)

因为你不会打字与检查===0空将用于该条件返回true.

请参阅此沙箱并使用示例 $status = null;

http://sandbox.onlinephpfunctions.com/code/1f3dd9d83d0026aa0f682b61bed2ba858ae285aa

输出:

'0'
Run Code Online (Sandbox Code Playgroud)

如果你把它改成这个

if ($status == 1) {
    $status = '1';
} else if ($status === 0) {
    $status = '0';  
} else if ($status === NULL) {
    $status = 'NULL';
} 
Run Code Online (Sandbox Code Playgroud)

正如您在此处所看到的,使用相同的设置 $status

http://sandbox.onlinephpfunctions.com/code/d86b0c60c06338d2d6ee1c1fa9d3fa7e08a22663

输出

'NULL'
Run Code Online (Sandbox Code Playgroud)

修复它的另一种方法是切换它们,使其更具体.

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';  
}
Run Code Online (Sandbox Code Playgroud)

然后0将捕获false以及0但不null作为块上面,会先抓住它.你可以在这里看到最后一个

http://sandbox.onlinephpfunctions.com/code/3028f5826dcede29b14dd8cfc03618ea5830c12c

哪个也输出

'NULL'
Run Code Online (Sandbox Code Playgroud)

干杯!