function filterCyclicalGroups($iTargetGroupID, $aGroupMemberships) { $aReturnGroupIDs = array(); // PHP5: clone/copy $aLocalGroupMemberships = $aGroupMemberships; // In case we get given ourself, we know we can't add ourselves // to each other. unset($aLocalGroupMemberships[$iTargetGroupID]); // Groups that have no group members can safely be added to the // group. Simplifies debugging of later code. foreach ($aLocalGroupMemberships as $k => $v) { if (is_null($v) || !count($v)) { unset($aLocalGroupMemberships[$k]); $aReturnGroupIDs[] = $k; } } $aBadGroupIDs = GroupUtil::listBadGroups($iTargetGroupID, $aLocalGroupMemberships); foreach ($aLocalGroupMemberships as $k => $v) { if (!in_array($k, $aBadGroupIDs)) { $aReturnGroupIDs[] = $k; } } return $aReturnGroupIDs; }