Autor Zpráva
jval
Profil *
Zdravím mám z db generované pole pro tabulku pořadí týmů v turnaji. Pomocí
usort($orders, function ($a, $b) {
  return $b['body'] - $a['body'];
});
si týmy seřadím podle získaných bodů, jenže já bych to potřeboval rozšířit a to tak, že pokud budou dva nebo více týmů mít stejný počet bodů tak aby se porovnal vzájemný zápas a pak ještě případně celkové skóre.

Řešil někdo něco podobného?
Jan Tvrdík
Profil
jval:
A kde je problém? Akorát rozšíříš tu porovnávací funkci, aby brala v potaz více pravidel.
jval
Profil *
Ja Tvrdík: zatím jsem to vyřešil tak, že před vzájemný zápas jsem upřednostnil celkové skóre.
usort($orders, function ($a, $b) {
    if ($b['body'] == $a['body']) {
        return $b['score'] - $a['score'];
    } else {
        return $b['body'] - $a['body'];
    }
});
protože nevím jak bych zajistil určitou rekurzi v případě že i po porovnání vzájemných zápasů na tom budou stejně.
Např.

3 týmy skončili s 9 body

Tým A porazil Tým B
Tým B porazil Tým C
Tým C porazil Tým A

Takže všichni jsou na prvním místě a tady by mělo teprve nastoupit celkové skóre, ale to že i po porovnání vzájemných zápasů jsou na tom ty týmy pořád stejně zjistím až po projetí celého cyklu usort.
Jan Tvrdík
Profil
jval:
Jestli ti tam můžou vznikat cykly, tak to trochu komplikuje, protože musíš kontrolovat jestli tam ten cyklus je nebo není.

Jinak jak by podle tebe mělo být seřazeny týmy A a B podle vzájemných zápasů, pokud A remízovalo s B, B porazilo C a C porazilo A?
jval
Profil *
[#4] Jan Tvrdík
V případě remízy A vs B by u tohoto zápasu asi muselo rozhodnout celkové skóre
Alphard
Profil
jval:
Jak vypadá $orders? Je z něj vůbec možné zjistit, jak dopadly ty vzájemné zápasy?
Kajman
Profil
Pro týmy, které mají stejně bodů bych udělal minitabulku se získanými body jen mezi sebou. Ty týmy se zkusí dořadit podle ní. Nesnažil bych se tu všechnu logiku nacpat do jedné funkce pro usort - kritérií bývá postupně většinou více.
jval
Profil *
[#6] Alphard
Z orders ne, ale mam v tu chvíli načtené pole matches, ze kterého by se to na základě orders, dalo načíst.


orders je např:
[2] => Array
    (
        [id_tym] => 16
        [id_turnaj] => 2
        [registrace] => ne
        [nazev] => VÍCHA
        [logo] => 16.png
        [facebook] =>
        [vedouci_id_hraci] => 120
        [rozdeleni] => dospělí
        [zakladni_skupina] => C
        [zakladni_cislo] => 1
        [poradi_skupina] => D
        [poradi_cislo] => 2
        [score] => 0
        [body] => 0
    )

[4] => Array
    (
        [id_tym] => 17
        [id_turnaj] => 2
        [registrace] => ne
        [nazev] => TEAM Coca Cola
        [logo] => 17.jpg
        [facebook] =>
        [vedouci_id_hraci] => 125
        [rozdeleni] => dospělí
        [zakladni_skupina] => C
        [zakladni_cislo] => 2
        [poradi_skupina] => D
        [poradi_cislo] => 4
        [score] => 0
        [body] => 0
    )
a matches:
[C1C2] => Array
    (
        [C1] => 5225
        [C2] => 5025
    )
Čili na základe orders podle skupiny a cisla se necha vytahnout z matches podle klice skore.
Bohužel DB stavěl někdo jiný, takže se s tím občas blbě pracuje a nebyl čas to celé překopat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: