考虑到请求,将用户分配到组中

时间:2017-09-10 08:54:10

标签: php symfony

我有一个将用户分配到不同大小的组的功能。此功能必须逐个填充组,直到达到每组的最大大小。 它考虑了想要与另一个用户在一个群组中的用户的请求。 问题出在哪里:当用户只提出一个请求时,一切都运行良好。但是当这个用户是许多请求的一部分时,该功能并没有做我想要的。

这是我的代码:

我为每个组创建一个多维数组,其中包含组对象,最大大小和添加到组中的用户计数器。

foreach ($groupes as $groupe) {
    $groupesOfCompo[] = ['objet' => $groupe,
            'max' => $groupe->getNombre(),
            'nombre' => 0];
    }

我收到用户要求与另一个用户在一起的所有请求,并将发出请求的用户添加到组中:

foreach ($demandes as $demande) {
        // Get groups where the user can be
        $groupes = $this->getAvailableGroupesForTutoresWithDemandes($dateDemande, $groupesOfCompo, $demande, $semestre);

        // Add tutore to group where the max size is not reached and where the counter of users is minimal
        if ($groupes) {
            $groupesOfCompo = $this->addTutoreToGroupOfMaxRemainingSpace($groupesOfCompo, $groupes, $demande->getTutoreSource());
        }
    }

private function addTutoreToGroupOfMaxRemainingSpace($groupesOfCompo, $groupes, $tutore1, $tutore2 = null) {

    // Get an array of groups counters
    $effectifs = array_column($groupes, 'nombre');
    // Get min counter
    $min = min($effectifs);
    // Get group of min counter
    $min_array = $groupes[array_search($min, $effectifs)];

    // Set group of source user to group of min counter
    $tutore1->setGroupeComposition($min_array['objet']);
    $this->em->persist($tutore1);

    // if there's a requested user in the request, set group of this user to the same group
    if ($tutore2) {
        $tutore2->setGroupeComposition($min_array['objet']);
        $this->em->persist($tutore2);
    }

    // In the initial array, find the group with min counter and increase the counter of 1 if there's not a requested user and of 2 if there's a requested user
    foreach ($groupesOfCompo as &$a) {
        if ($a['objet'] === $min_array['objet']) {
            if ($tutore2) {
                $a['nombre'] += 2;
            }
            else {
                $a['nombre']++;
            }
        }
    }

    return $groupesOfCompo;
}

然后,我将请求的用户添加到与请求用户相同的组中:

foreach ($demandes as $demande) {
        $tutore2 = $demande->getTutoreDemande();
        $tutore2->setGroupeComposition($demande->getTutoreSource()->getGroupeComposition());
        $this->em->persist($tutore2);
    }

有我的问题。我需要考虑作为请求或请求用户的多个请求中的用户。对于每个请求,添加相同组中涉及的所有用户,相应地更新计数器。

0 个答案:

没有答案