PHP使用OR,但避免在两种情况都为真时运行


PHP using OR but avoid running when both cases are true

我遇到了一个问题。

我使用的是一个递归函数,它将把case传递给另一个函数运行。

问题是我正在做以下事情:

if ($case == 1 || count($matching) == 0 && $case == NULL)
    do something....

所以"做某事"仅当$case == 1或仅当$matching > 0$case == NULL

看起来PHP没有正确理解它。

事实上,如果$case == 1$matching > 0,它无论如何都会运行"做点什么",即使它不应该运行,因为我对它说,只有当$casealso == NULL时,当$matching > 0时才运行"做些什么"。

怎么了?

我如何告诉PHP只在$case == 1时运行,或者仅在$matching > 0$case == NULL时运行?

使用XOR逻辑运算符(XOR来自eXclusive OR):

if ($case == 1 xor ($matching > 0 && $case == null)) { ... }

在PHP中,&优先于||,因此需要添加括号:

($case == 1 || (count($matching) == 0 && $case == NULL) )

试试这个,这将确保最后两个条件组合在一起,并且这两个条件的结果为真,当且仅当它们都为真:

if ($case == 1 || (count($matching) > 0 && $case == NULL)){
}