0

我有这个 if 语句在这里并且它不起作用

if(
    ($division->id == 1 || $division->id == 2) && 
    in_array('member1', $memberships) || 
    in_array('member2', $memberships) ||
    in_array('member3', $memberships) ||
    in_array('member4', $memberships) || 
    ($division->id != 1 || $division->id != 2) 
    && in_array('member5', $memberships))
    {
        return FALSE;
    } else {
        return TRUE;
    }

我想做的是说如果 $division 是 1 或 2 并且如果 member1、member2、member3、member4 在数组 $memberships 中返回 false,如果 $division 不是 1 或 2 并且 member5 在数组中返回 false,其他一切都返回真。

这不起作用,因为 member5 在数组中并且 $division 为 1,它应该返回 true,但它返回 false。

PS - member1-5 只是我在这里使用的名称,因为它们实际上是我数组中的个人信息。

我究竟做错了什么?

4

4 回答 4

2

我会用一系列不同的“if”语句来做这件事,以避免你绕弯子试图解决它。

我根据您的陈述创建了这段代码......

我想做的是说如果 $division 是 1 或 2 并且如果 member1、member2、member3、member4 在数组 $memberships 中返回 false,如果 $division 不是 1 或 2 并且 member5 在数组中返回 false,其他一切都返回真。

我想我的逻辑是正确的,我要仔细检查一下:

if ($division->id == 1 || $division->id == 2)
{
    if (in_array("member_2", $memberships) || in_array("member_3", $memberships) || in_array('member_3', $memberships) || in_array('member_4', $memberships))
    {
        return false;
    }
    else
    {
        return true;
    }
}
else
{
    if (in_array("member_5", $memberships))
    {
        return false;
    }
    else
    {
        return true;
    }
}
于 2012-11-12T15:39:41.767 回答
0

这些是逻辑分组,每行 1 个。如果这不是您想要的,请使用括号来调整 php 如何评估它。

   ($division->id == 1 || $division->id == 2) && in_array('member1', $memberships)
|| in_array('member2', $memberships) 
|| in_array('member3', $memberships) 
|| in_array('member4', $memberships) 
|| ($division->id != 1 || $division->id != 2) && in_array('member5', $memberships))
于 2012-11-12T15:35:11.727 回答
0

尝试:

if(
(($division->id == 1 || $division->id == 2) && 
(in_array('member1', $memberships) || 
in_array('member2', $memberships) ||
in_array('member3', $memberships) ||
in_array('member4', $memberships))) || 
(($division->id != 1 || $division->id != 2) 
&& in_array('member5', $memberships)))
{
    return FALSE;
} else {
    return TRUE;
}
于 2012-11-12T15:49:05.083 回答
0

更少的代码行并不总是意味着它更好,将其分解并使其可读,例如:

$output = true;

if($division->id == 1 || $division->id == 2)
{
    if(in_array("member_2", $memberships) || in_array("member_3", $memberships) || in_array('member_4', $memberships))
    {
        $output = false;
    }
}
else
{
    if (in_array("member_5", $memberships))
    {
        $output = false;
    }
}

return $output;
于 2012-11-12T15:50:29.780 回答