Почему не работает этот простой PHP, если оператор, и как я могу его исправить? - PullRequest
2 голосов
/ 30 ноября 2011

Это, если оператор else не работает: (в этой ситуации он отображает 'x is euqal to 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, поэтомуЯ, наверное, невероятно толстый, но любые предложения будут высоко оценены, спасибо:)

Ответы [ 4 ]

5 голосов
/ 30 ноября 2011

Я верю, что первое условие возвращает 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!';}

?>
2 голосов
/ 30 ноября 2011

Вы попадаете в тонкости типа жонглирования:

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

... отпечатков:

bool(true)
bool(false)

Вы можете делать много вещей, но используяОператор 1009 *===, вероятно, самый простой.Просто убедитесь, что вы используете согласованные типы данных, то есть не смешивайте 0 и '0' небрежно.

2 голосов
/ 30 ноября 2011

Вы имеете в виду null или строку 'null'? Я предполагаю, что вы имеете в виду значение null, как ни в чем. В этом случае ваше сравнение с 'null' равно 0, потому что вы «только» используете ==, вам следует использовать строгое сравнение, которое равно ===.

Хорошая привычка - не использовать else if, а elseif. Узнайте больше на документы

Вам также следует поработать над улучшением синтаксиса, это довольно запутанно.

Для вашего случая я бы проверил на 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-теги - очень плохая идея.

0 голосов
/ 30 ноября 2011

Строка 'null' преобразуется в число, когда вы сравниваете ее с числом.Смотрите PHP документацию для сравнения операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...