Avatar billede sorenriis Nybegynder
19. september 2005 - 21:30 Der er 9 kommentarer og
1 løsning

Sortere array i PHP

Jeg har følgende array.

Array
(
    [0] => Array
        (
            [Navn] => Person1
            [Points] => 12
        )

    [1] => Array
        (
            [Navn] => Person2
            [Points] => 60
        )

    [2] => Array
        (
            [Navn] => Person3
            [Points] => 50
        )

    [3] => Array
        (
            [Navn] => Person4
            [Points] => 100
        )
)

Det vil jeg gerne have sorteret, så det ser således ud (altså efter hvor mange points den enkelte person har):

Array
(
    [0] => Array
        (
            [Navn] => Person4
            [Points] => 100
        )

    [1] => Array
        (
            [Navn] => Person2
            [Points] => 60
        )

    [2] => Array
        (
            [Navn] => Person3
            [Points] => 50
        )

    [3] => Array
        (
            [Navn] => Person1
            [Points] => 12
        )
)

Hvordan klares det? Jeg kan godt finde ud af det, hvis det er et enkelt array - men ikke når der er "flere" inden i hinanden.
Avatar billede erikjacobsen Ekspert
19. september 2005 - 21:33 #1
Du skal bruge http://php.net/usort - prøv at kigge på den, ellers kan du få mere hjælp ;)
Avatar billede sorenriis Nybegynder
19. september 2005 - 21:44 #2
Tak.. jeg fandt faktisk ud af det vha. at prøve mig frem. Jeg forstår dog ikke helt hvorfor det virker :D

Lavede denne funktion:
function compare($a, $b){
    if($a["Points"]<$b["Points"]){
        return 1;
    }
    if($a["Points"]==$b["Points"]){
        return 0;
    }
    if($a["Points"]>$b["Points"]){
        return -1;
    }
}

og kørte så denne funktion på array'et:
usort($array, "compare");

Kan du forklare mig hvad den usort helt præcist gør?
Avatar billede erikjacobsen Ekspert
19. september 2005 - 21:52 #3
usort kalder din fine sammenligningsfunktion, hver gang den skal afgøre om 2 elementer i arrayet skal byttes om. Det er det hele ...
Avatar billede sorenriis Nybegynder
19. september 2005 - 21:53 #4
Smart... Afgiv lige svar, så du kan få nogle points :-)
Avatar billede erikjacobsen Ekspert
19. september 2005 - 22:00 #5
Nej tak, jeg samler slet ikke på point. Svar selv, accepter eget svar.
Avatar billede sorenriis Nybegynder
19. september 2005 - 22:00 #6
OK.. mange tak for hjælpen!
Avatar billede Slettet bruger
19. september 2005 - 22:35 #7
Hvis du kun har 2 værdier i hver array-række, kan du med fordel bruge navnet som nøgle:

$Users['Person1'] = '12';
$Users['Person2'] = '100';
$Users['Person3'] = '4';

osv, osv.. Det kan også skrives sådan:

$Users = array('Person1' => '12', 'Person2' => '100', 'Person3' => '4');
Avatar billede nielle Nybegynder
19. september 2005 - 22:41 #8
Din compare-funktion fra 19/09-2005 21:44:15 kan faktisk forkortes til:

function compare($a, $b)
{
    return $b["Points"] - $a["Points"];
}
Avatar billede sorenriis Nybegynder
19. september 2005 - 22:43 #9
Mange tak for de inputs...
Avatar billede nielle Nybegynder
26. september 2005 - 17:51 #10
:^)
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