Avatar billede Slettet bruger
26. juli 2009 - 12:21 Der er 5 kommentarer og
1 løsning

Fejl ved sortering (usort) - hjælp søges!

Hejsa!

Jeg er igang med et turneringssystem, hvor jeg pt. er nået til gruppespillet! I gruppespillet får man points for sine kampe (sejr: 3, uafgjort: 1, nederlag: 0) men man får også gemt sin score - så man har en målscore-differential!

Jeg skal nu have sorteret mine deltagere, først efter points og derefter score-differential. Jeg har umiddelbart løst det således:

----

function sortStandings($arr){
   
    if(!function_exists("diff")){
        function diff($a, $b){
            $i = "diff";
            if($a[$i] == $b[$i]) return 0;
            return ($a[$i] > $b[$i]) ? -1 : 1;
        }
    }
   
    if(!function_exists("pts")){
        function pts($a, $b){
            $i = "pts";
            if($a[$i] == $b[$i]) return 0;
            return ($a[$i] > $b[$i]) ? -1 : 1;
        }
    }
   
    usort($arr, "diff");
    usort($arr, "pts");
   
    return $arr;
   
}

----

Problemet er bare at usort på diff fucker op når jeg usort'er pts :/ En af mine tabeller ser således ud nu:

NR | Score Diff | Pts
1 | 220 | 6
2 | 50 | 3
3 | -120 | 0
4 | -50 | 0
5 | -100 | 0

Den sorterer jo korrekt efter points, men score diff. er broken.

Nogen der har nogle forslag?

På forhånd tak!
Caspar
Avatar billede majbom Novice
26. juli 2009 - 12:49 #1
hvor får du de data fra inden du kører disse funktioner?

hvis de kommer fra en database, var det så ikke noget der kunne løses med den rette query?
Avatar billede Slettet bruger
26. juli 2009 - 12:54 #2
De kommer fra en database - jeg er dog PT ikke interesseret i at løse det ved en query da det vil tage mig længere tid end jeg har til at løse det.

Jeg har 2 timer til at få det løst, nogen der har forslag? :)
Avatar billede Slettet bruger
26. juli 2009 - 13:03 #3
Problem solved:

function sortStandings($arr){
   
    if(!function_exists("cmp")){
        function cmp($a, $b){
            $i = "pts";
            if($a[$i] == $b[$i]) $i = "diff";
            if($a[$i] == $b[$i]) $i = "for";
            if($a[$i] == $b[$i]) $i = "name";
           
            if($a[$i] == $b[$i]) return 0;
            else return ($a[$i] > $b[$i]) ? -1 : 1;
        }
    }
   
    usort($arr, "cmp");
   
    return $arr;
   
}
Avatar billede repox Seniormester
26. juli 2009 - 13:04 #4
Jeg forstår ikke hvorfor det vil tage dig længere tid at løse vha din sql forespørgsel. #1 kom med et godt forslag, som sikkert vil løse opgaven for dig hurtigere.

$sql = "SELECT NR, ScoreDiff, Pts FROM tabel ORDER BY Pts DESC, ScoreDiff DESC";
Avatar billede Slettet bruger
26. juli 2009 - 16:49 #5
Nu er det bare sådan at min database ikke er bygget så simpelt op :-)
Avatar billede majbom Novice
26. juli 2009 - 18:36 #6
-> #5 - hvordan er den bygget op?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester