ИЛИ в PHP, если заявление - PullRequest
3 голосов
/ 12 июня 2011

У меня проблемы с моим утверждением IF, оно всегда ИСТИННО, хотя и неверно.Я использую оператор OR, так как есть два возможных сценария, которые я хочу записать в операторе IF.

Строка массива ad_status имеет значение «1», но возвращается значение ниже -3, я ожидаю, что IF будет FALSE.Если я удалю ИЛИ и второе утверждение из IF, результат IF будет правильным.

Что я сделал не так?Спасибо.

    if(($getadstatus['ad_status'] != "1" || $getadstatus['ad_status'] != "4"))
    {
        return -3;
        exit;
    }

Дополнительно: я хочу выйти из функции (здесь не рассматривается полностью), если ad_status не равен 1 или 4. Если он равен любому другому значению, кроме 1 или 4,оператор IF должен вернуть TRUE и выйти.ad_status может принимать любое значение от 0 до 4.

Ответы [ 8 ]

8 голосов
/ 12 июня 2011

Вы говорите, что любое значение, not 1 ИЛИ not 4, должно возвращать true.

Для '1' вы получите утверждение

if( 1 != 1 || 1 != 4)

, которое переводитна

if( false || true )

, что, конечно, верно.

То, что вам нужно, это:

if(!($value == 1 || $value==4))

, что совпадает с ( закон Моргана )

if($value != 1 && $value != 4)
2 голосов
/ 12 июня 2011

Я лично предпочитаю in_array вместо OR в выражениях IF.Например:

$array = array(1,4);

if (!in_array($getadstatus['ad_status'], $array)) {
 // do whatever

 }
2 голосов
/ 12 июня 2011

Вы хотите использовать &&

if(($getadstatus['ad_status'] != "1" && $getadstatus['ad_status'] != "4"))
{
    return -3;
    exit;
}
2 голосов
/ 12 июня 2011

Вы должны использовать оператор &&, потому что используйте !=.Если вы хотите использовать ||, вы можете написать так:

if (!($getadstatus['ad_status'] == "1" || $getadstatus['ad_status'] == "4"))

2 голосов
/ 12 июня 2011

Это всегда будет истиной, так как любое значение не может быть одновременно «1» и «4».

2 голосов
/ 12 июня 2011

Вы проверяете:

ad_status != 1 -> FALSE
ad_status != 4 -> TRUE

if (FALSE OR TRUE) всегда TRUE.

Чтобы быть тем, что вы ожидали, замените ИЛИ на AND:

if(($getadstatus['ad_status'] != "1" && $getadstatus['ad_status'] != "4"))
{
    return -3;
    exit;
}
2 голосов
/ 12 июня 2011

Там нет ошибок.

Если ad_status == 1, тогда ваше второе условие приведет вас в If, если

$getadstatus['ad_status'] != "4"

верно, поэтому вы получите return -3;

Если я получил то, что вы хотите, вы должны использовать AND

if ( $a!= 1 AND $a!= 4 )
0 голосов
/ 12 июня 2011

Хм, хорошо, я думаю, я вижу.Я пытаюсь быть слишком умным.Я хочу использовать один оператор IF для проверки двух не связанных условий.Если ad_status не равен 1 или 4, верните -3 и выйдите из функции.

Хорошо, нет проблем, это можно выразить, просто сформулируйте так, как вы пишете:

$status = $getadstatus['ad_status']; // assign a variable as it makes things easier to read.
if ( !( $status==1 || $status==4 ) )
{
    return -3;
}

Так что ! (не) должно быть в целом ИЛИ для сравнения какВы написали в своем предложении.Это, вероятно, в коде, что вы изначально имели в виду.Но так как порядок важен, перед использованием оператора not (!) необходимо сначала вычислить в скобках другую часть вашего условия.

Added:

Чем большеподусловия являются частью условия или выражения, тем более сложным оно становится.Но чем чаще вы формулируете сложные условия, тем лучше вы с ними справляетесь.Для обучения вы всегда можете разделить условия на несколько строк и назначить метки (переменные) их части:

$status = $getadstatus['ad_status'];
$statusIs1or4 = $status==1 || $status==4;
$statusIsNot1or4 = !$statusIs1or4;
if ($statusIsNot1or4) return -3;

Для производственного кода это может быть чрезмерно использовано, но, как всегда, авторы выбирают, как что-то написать,Вы можете делать все, что позволяет язык.

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