-2

我有一个 if 表达式,我想在其中检查数组和另一个变量中的一些项目。我原来的 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。谢谢!

4

2 回答 2

1

$一|| $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.';
}

这意味着如果这些事情都不成立,那么用户就没有权限。

于 2013-08-23T15:42:35.817 回答
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)

意味着一个或另一个,但不是两者兼而有之

于 2013-08-23T15:40:57.947 回答