Несколько OR в php if (), похоже, не реагируют должным образом. Тестируемые значения массива и все. Что я делаю не так?

Я выполняю очень простое утверждение if, которое работает идеально, пока я не добавлю два дополнительных || (или) операторов.

Вот мой код:

if ($planDetails['Company']['name'] != 'company1' || $planDetails['PlanDetail']['name'] != 'pd-name1' || $planDetails['PlanDetail']['name'] != 'pd-name2') { echo "TEST"; } 

Я проверил данные массива и таблицы, чтобы убедиться, что они точны в именах и т . Д. И это не пинает. Что я делаю не так? Когда я удаляю дополнительные 2 || options, первый аргумент работает отлично, поэтому я знаю, что моя логика правильная.

Что я назвал здесь неправильно. Кто-то, пожалуйста, поставил меня прямо!

Ваши орды должны быть и. Выражение a != 1 || a != 2 a != 1 || a != 2 всегда истинно, потому что, независимо от значения a, одно или другое из выражений будет истинным, так что конечный результат будет правдой.

Чтобы исправить, измените || to && .

Я предполагаю, что вы допустили эту ошибку, потому что вы начали с этого выражения и хотели инвертировать ее:

 if ($planDetails['Company']['name'] == 'company1' || $planDetails['PlanDetail']['name'] == 'pd-name1' || $planDetails['PlanDetail']['name'] == 'pd-name2') 

Самый простой способ инвертировать эти выражения состоит в следующем:

 if (!($planDetails['Company']['name'] == 'company1' || $planDetails['PlanDetail']['name'] == 'pd-name1' || $planDetails['PlanDetail']['name'] == 'pd-name2')) 

Используя этот метод, вам не нужно делать какую-либо сложную логическую логику в своей голове, чтобы увидеть, что она работает – это просто отрицание того, что вы уже знаете. Обратите внимание, что это не то же самое, что инвертировать == to != Индивидуально. См . Законы Моргана для более подробной информации.

Хорошо, что я читаю здесь:

 If $variable is not equal to A Or $variable is not equal to B Then echo "TEST" 

Поскольку $variable не может одновременно равняться как A, так и B, она всегда будет печатать «TEST».

Конечно, вышеупомянутое относится к двум последним условиям в вашем if .

Пожалуйста, обратитесь к законам Де Моргана .

 NOT (P AND Q) = (NOT P) OR (NOT Q) NOT (P OR Q) = (NOT P) AND (NOT Q) 

У тебя есть:

 (NOT P) OR (NOT Q) OR (NOT R) 

Это то же самое, что:

 NOT (P AND Q) OR (NOT R) => NOT (P AND Q AND R) 

Следовательно, P, Q, R должны быть ложными для печати «TEST». Если одно из них истинно, вы не будете печатать «TEST».

Я считаю, что вы хотите:

 NOT (P OR Q OR R) 

Что будет:

 (NOT P) AND (NOT Q) AND (NOT R) 

ИЛИ

 if (!($planDetails['Company']['name'] == 'company1' || $planDetails['PlanDetail']['name'] == 'pd-name1' || $planDetails['PlanDetail']['name'] == 'pd-name2')) { echo "TEST"; } 

AKA

 if ($planDetails['Company']['name'] != 'company1' && $planDetails['PlanDetail']['name'] != 'pd-name1' && $planDetails['PlanDetail']['name'] != 'pd-name2') { echo "TEST"; }