Как отсортировать список объектов на основе приоритетного ввода - PullRequest
0 голосов
/ 29 апреля 2020

Проблема: мне нужно отсортировать список объектов, называемых турнирами, по 3 различным критериям.

  1. Поле с именем start (timestamp)
  2. Поле с именем game__id
  3. Поле с названием platform__id

нет. 3. проблематично c, потому что менеджеры контента CMS (pimcore) хотят следующий порядок: Ps4 -> Xbox -> P c, однако базы данных pimcore генерируются автоматически, и вы не знаете идентификатор платформы, поэтому вы не всегда может полагаться на то, что Ps4 будет первым et c.

Часть решения:

Создайте поле «приоритет» в объектной платформе, с помощью которой команда контента может go в каждом из них и выберите 1, 2, 3, 4 и т. д. c.

Сортируйте эти поля приоритетов (uasort) и затем отображайте турниры по приоритетам платформ (Ps4 -> Xbox -> P c или даже наоборот, если хотите).

Код:

$tournamentList = new Tournament\Listing();
    $tournamentList->setCondition("start >= unix_timestamp(NOW() - INTERVAL 1 DAY)");    // fetch only not finished
    $tournamentList->setOrder('ASC');

    $platformList->getObjects();
    $platformObject = $platformList->objects;
    uasort($platformObject, function($a, $b) {
        if ($a->getPriority() == $b->getPriority()) {
            return 0;
        }
        return ($a->getPriority() > $b->getPriority()) ? +1 : -1;
    });

    foreach ($platformObject as $platform) {
        $priority = $platform->getPriority();
    }

    $tournamentList->setOrderKey([
        "start",
        "game__id",
    ]);

Это то, где я застрял, да, я отфильтровал ввод, и теперь у меня есть 1 , 2, 3, но как сортировать мои турниры по платформам и по приоритетному полю?!

...