如果声明不起作用,PHP很长

时间:2012-11-12 15:32:10

标签: php if-statement

如果这里的陈述没有工作,我就有这个

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在数组$ membership中,则返回false,如果$ division不是1或2且member5在数组中返回false,其他一切都返回true。

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

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

我做错了什么?

4 个答案:

答案 0 :(得分:2)

我会做一系列不同的'if'陈述,以避免你试图解决这个问题。

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

  

我想要做的是说$ division是1还是2,如果是member1,   member2,member3,member4在数组$ membership中返回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;
    }
}

答案 1 :(得分: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))

答案 2 :(得分: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;
}

答案 3 :(得分: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;