PHP операторы if оператор 'и' и 'или' - PullRequest
3 голосов
/ 31 января 2012

У меня есть оператор if, которым я хочу управлять, имея одно поле, требующее ввода, и они должны выбрать один из двух других вариантов.

if(test1 && test || test3){
//Something here
}

Должен ли я сделать это так:

if(test1 && (test2 || test3)){
//do stuff
}

Как бы я поступил так? Я не могу обернуться вокруг логики ...

Ответы [ 6 ]

13 голосов
/ 31 января 2012
if ($requiredField && ($optional1 || $optional2)) {
  /* Do something */
}

Для выполнения бита кода /* Do something */ оператор if должен иметь значение TRUE.

Это означает, что $requiredField должно быть TRUE, и поэтомудолжно быть ($optional1 || $optional2).

Чтобы $requiredField было TRUE, его просто нужно заполнить, а для второй части: ($optional1 || $optional2) либо optional1, либо optional2 сделает это.

Редактировать:

После перечитывания вопроса, похоже, я вас неправильно понял.Если пользователь должен ввести один конкретный фрагмент информации, а должен выбрать только один (не оба) из двух вариантов - тогда следует использовать следующее.

if ($requiredField && ($optional1 ^ $optional2)) {
  /* Do something */
}

Это означает, что $optional1 или $optional2 должны быть заполнены - но не оба из них.

2 голосов
/ 31 января 2012

test1 && (test2 || test3) очень легко понять с самого начала - выберите test1 && (test2 || test3) означает один из последних двух.Очень ясно.

test1 && test || test3 - кажется, не правильно:

test1 = false
test2 = false
test3 = true

false && false || true = true

на самом деле не соответствует вашим критериям.

2 голосов
/ 31 января 2012

Судя по звуку, вы хотите последнее:

if ($test1 && ($test2 || $test3)){
    //do stuff
}

Думайте об этом как о двух условиях, которые должны быть выполнены. Это дает вам эти два условия. Второе условие просто оказывается другим условием. Однако первый вариант, который вы опубликовали, является совершенно противоположным, поскольку он может разрешить выполнение, если значение $test3 истинно

1 голос
/ 31 января 2012

... они должны выбрать один из двух других вариантов

Я просто высказываю предположение здесь. Если вы действительно хотите убедиться, что выбран один, но только один из двух других вариантов, тогда вам нужно xor:

if ($required AND ($and_either XOR $or_other)) {
0 голосов
/ 31 января 2012

Ваша логика верна, но ваш синтаксис - нет, вы должны сравнить значения переменных, как показано, или просто игнорировать их, говоря, что вы пытаетесь сравнить их, поскольку они ИСТИНА.

$test1=true;
$test2=true;
$test3=false;
if($test1==true && ($test2==true || $test3==true){ echo "YES";}

Это выдаст ДА.

0 голосов
/ 31 января 2012

Вы можете иметь «вложенные» операторы if без одного оператора if с дополнительными скобками.

 if(test1 && (test2 || test3)){
    //do stuff
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...