我有一个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。谢谢!
答案 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)
含义一个或另一个,但不是两个