如何重构这些多个其他-if块? 有没有更好的方法

This code block checks if the item or the person is present in a particular group and gives authorization to view to only those members present.There are four such groups and multiple scenarios or probabilities.This feels like a code smell and would like to know a better way to do.fyi:item1, item2, item3, item4 are the keys for the groups

if ((in_array('item1', (Authorization::getAdmin($Id)))) &&
                (in_array('item2', (Authorization::getAdmin($Id)))) &&
                (in_array('item3', (Authorization::getAdmin($Id)))) &&
                ((in_array('item4', (Authorization::getAdmin($Id)))))) {


            }
            elseif ((in_array('item2', (Authorization::getAdmin($Id)))) &&
                ((in_array('item3', (Authorization::getAdmin($Id))))) &&
                ((in_array('item4', (Authorization::getAdmin($Id)))))){

            }

            elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
                ((in_array('item3', (Authorization::getAdmin($Id))))) &&
                ((in_array('item4', (Authorization::getAdmin($Id)))))){

            }

            elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
                ((in_array('item2', (Authorization::getAdmin($Id))))) &&
                ((in_array('item4', (Authorization::getAdmin($Id)))))){

            }

            elseif ((in_array('item3', (Authorization::getAdmin($Id)))) &&
                ((in_array('item2', (Authorization::getAdmin($Id))))) &&
                ((in_array('item4', (Authorization::getAdmin($Id)))))){

            }


            elseif ((in_array('item3', (Authorization::getAdmin($Id)))) &&
                ((in_array('item2', (Authorization::getAdmin($Id))))) &&
                ((in_array('item1', (Authorization::getAdmin($Id)))))){

            }


            elseif ((in_array('item2', (Authorization::getAdmin($Id)))) &&
                ((in_array('item3', (Authorization::getAdmin($Id)))))) {

            }

            elseif ((in_array('item3', (Authorization::getAdmin($Id)))) &&
                ((in_array('item1', (Authorization::getAdmin($Id)))))) {


            }

            elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
                ((in_array('item2', (Authorization::getAdmin($Id)))))) {

            }


            elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
                ((in_array('item4', (Authorization::getAdmin($Id)))))) {

            }

            elseif ((in_array('item4', (Authorization::getAdmin($Id)))) &&
                ((in_array('item2', (Authorization::getAdmin($Id)))))) {

            }

            elseif ((in_array('item4', (Authorization::getAdmin($Id)))) &&
                ((in_array('item3', (Authorization::getAdmin($Id)))))) {

            }

           elseif(in_array('item1',(Authorization::getAdmin($Id))))
           {

           }

            elseif(in_array('item2',(Authorization::getAdmin($Id))))
            {

            }

            elseif(in_array('item3',(Authorization::getAdmin($Id))))
            {

            }

            elseif(in_array('item4',(Authorization::getAdmin($Id))))
            {

            }


        }

If I understand correctly, you could reduce it to this:

$groups = Authorization::getAdmin($Id);

foreach (['item1', 'item2', 'item3', 'item4'] as $group_key) {
    if (in_array($group_key, $groups)) {
        // give authorization to view that group
    }
}

Definitely put the static function call result into a local variable. That'll save you a lot of processing power and reduce code.

I like Don't Panic's solution and would expand on it to cross-index it with your permission matrix...

$permissions = ['I can do this' => ['item1'], 'I can do that' => ['item1', 'item2'], ... ];
$groups = Authorization::getAdmin($Id);
$authorization = [];

foreach (['item1', 'item2', 'item3', 'item4'] as $group_key) {
  if (in_array($group_key, $groups)) {
    $authorization[] = $group_key;
  }
}

And a way to get the permission result is a quick array search.

$permission = array_search($authorization, $permissions );

This gets you a singular result only; if it's more complex than that, you may have to build a complex statement to sort it out.