我正在运行一个非常简单的 if 语句,在我添加两个额外的 || 之前它可以完美运行(或)运营商。

这是我的代码:

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

我已经检查了我的数组数据和表值,以确保它们在名称等中准确无误。 .. 这不是踢。我究竟做错了什么?当我删除额外的 2 ||选项,第一个参数工作正常,所以我知道我的逻辑是正确的。

我的名字在这里做错了。有人请让我挺直!

最佳答案

你的 ors 应该是 ands。表达式 a != 1 || a != 2 始终为真,因为无论 a 的值是什么,表达式中的一个或另一个将为真,因此最终结果将为真。

要解决此问题,请将||更改为&&

我猜你犯了这个错误,因为你从这个表达式开始并想反转它:

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'))

使用此方法,您无需在头脑中执行任何复杂的 bool 逻辑即可查看它是否有效——这只是对您已经知道的内容的简单否定。请注意,这与单独将 == 反转为 != 不同。有关更多详细信息,请参阅 De Morgan's Laws

关于php - php if() 中的多个 OR 似乎没有正确响应。测试数组值和所有。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5198895/

10-08 23:10