in_array()的意外结果和if表达式中的多个条件

时间:2013-08-23 15:37:42

标签: php arrays if-statement

我有一个if表达式,我想检查一个数组中的一些项目和另一个变量。我原来的表达是这样的:

if(!in_array($user->id, array($lsp->created_by_id, $lsp->approving_committee_pri_id, $lsp->approving_committee_sec_id)) or $user->level != 5)
{
    $error[] = 'You do not have permissions to modify this.';
}

然而,我没有得到预期的结果。实质上,如果用户的id不在数组中,则用户的访问级别不等于5,那么它应该填充$error数组。即使我修改数据库使得用户的id在数组中,或者他的访问级别等于5,它仍然填充$error数组。

我必须修改我的代码才能使它工作,这与我之前的代码相反:

if(in_array($user->id, array($lsp->created_by_id, $lsp->approving_committee_pri_id, $lsp->approving_committee_sec_id)) or $user->level == 5)
{
    //does nothing
}
else
{
    $error[] = 'You do not have permissions to modify this.';
}

我做错了什么?我想在一行中做到这一点,但也许我不能正确理解。我使用的是PHP 5.4.14。谢谢!

2 个答案:

答案 0 :(得分:1)

$ a || $ b与!$ a ||不同!$ B

在你的逻辑中尝试AND:

if(!in_array($user->id, array($lsp->created_by_id, $lsp->approving_committee_pri_id, $lsp->approving_committee_sec_id)) && $user->level != 5)
{
    $error[] = 'You do not have permissions to modify this.';
}

如果这些事情都不属实,则表示用户没有权限。

答案 1 :(得分:0)

我相信你想使用XOR

if(!in_array($user->id, array($lsp->created_by_id, $lsp->approving_committee_pri_id, $lsp->approving_committee_sec_id)) XOR $user->level != 5)

含义一个或另一个,但不是两个