为什么这个简单的PHP if语句不能工作,以及我如何纠正它


Why doesn't this simple PHP if statement work, and how can I correct it?

这个if else语句不起作用:(在这种情况下,它显示'x等于null')

<?php
$x = 0;
if ($x == 'null'){
    echo 'x is euqal to null';}
else if ($x == 0){
    echo 'x is equal to zero!';}
else if ($x == 1){
    echo 'x is equal to one!';}
?>

我需要这个的原因是我正在编写一个测验程序,其中一个功能是它在每个问题旁边显示一个勾号,叉号或三个点,这取决于用户是否做了以及他们的分数。

如果这个问题的得分= 'null',那么他们还没有做(显示…)如果这道题的得分为1,那么他们就答对了(显示勾号)。如果这道题的得分为0,那么他们没有答对,但答对了(显示交叉)

我的实际代码是:

$score = ($_SESSION['score']);       
         if ($score[$questionList[$loop]['ID']]=='null'){ ?>
             <p style="display:inline;"> ...  </p> <?php } 
         else if ($score[$questionList[$loop]['ID']]==1){ ?>
             <p style="display:inline;"> &#10003  </p> <?php }      
        else if ($score[$questionList[$loop]['ID']]==0){ ?>
             <p style="display:inline;"> X  </p> <?php }  ?>  

虽然它是一个更大的页面的一部分。

我是一个PHP新手,所以我可能在这里难以置信的厚,但任何建议将非常感激,谢谢:)

我相信第一个条件返回true,因为字符串等于0。参见比较操作符的文档。

解决方案是将==替换为===。例:

<?php
$x = 0;
if ($x === 'null'){
    echo 'x is euqal to null';}
else if ($x === 0){ ''true
    echo 'x is equal to zero!';}
else if ($x === 1){
    echo 'x is equal to one!';}
?>

您是指null还是字符串'null' ?我猜你的意思是值null,就像没有一样。在这种情况下,您与'null'的比较等于0,因为您"只"使用==,所以您应该使用严格的比较,即===

使用elseif而不是else if是一个好习惯。阅读更多文档

你还应该改进你的语法,它很令人困惑。

对于您的情况,我会检查null作为最后一件事,而不是把它放在一个elseif中,而只是让它成为最后一种情况。这样的

$score = ($_SESSION['score']);       
if ($score[$questionList[$loop]['ID']] === 1)
{
    print '<p style="display:inline;"> &#10003  </p>';
}      
elseif ($score[$questionList[$loop]['ID']] === 0)
{
    print '<p style="display:inline;"> X  </p>';
} 
else
{
    print '<p style="display:inline;"> ...  </p>';
} 

总是打开和关闭你的php标签是一个非常糟糕的主意。

你正在触及类型杂耍的微妙之处:

var_dump(0 == 'null');
var_dump('0' == 'null');

…打印:

bool(true)
bool(false)

你可以做很多事情,但使用===运算符可能是最简单的。只要确保您使用的数据类型是一致的,即不要随意混合0'0'

字符串'null'在与数字比较时被转换为数字。有关比较运算符,请参阅PHP文档。