Avatar billede nicklasb Nybegynder
02. april 2007 - 14:51 Der er 8 kommentarer og
1 løsning

Sortering af array

Jeg har et array der ser ud som følger

$array = array(
  0 => array('id' => 0, 'antal' => 5, 'navn' => 'B'),
  1 => array('id' => 1, 'antal' => 6, 'navn' => 'A'),
  2 => array('id' => 2, 'antal' => 3, 'navn' => 'D'),
  3 => array('id' => 3, 'antal' => 9, 'navn' => 'C')
);

Jeg vil gerne have det sorteret efter 'navn', så arrayet kommer til at se ud som følger
$array = array(
  1 => array('id' => 1, 'antal' => 6, 'navn' => 'A'),
  0 => array('id' => 0, 'antal' => 5, 'navn' => 'B'),
  3 => array('id' => 3, 'antal' => 9, 'navn' => 'C'),
  2 => array('id' => 2, 'antal' => 3, 'navn' => 'D')
);

.. selvfølgelig så hurtigt som muligt.
Avatar billede erikjacobsen Ekspert
02. april 2007 - 14:54 #1
Du vil ikke have det sådan her?

$array = array(
  0 => array('id' => 1, 'antal' => 6, 'navn' => 'A'),
  1 => array('id' => 0, 'antal' => 5, 'navn' => 'B'),
  2 => array('id' => 3, 'antal' => 9, 'navn' => 'C'),
  3 => array('id' => 2, 'antal' => 3, 'navn' => 'D')
);
Avatar billede erikjacobsen Ekspert
02. april 2007 - 14:58 #2
function cmp($a, $b) {
  return strcmp($a["name"], $b["name"]);
}

usort($array, "cmp");

while (list($key, $value) = each($array)) {
echo "\$array[$key]: " .$array["id"]." ".$array["antal"]." ".$array["name"] . "\n";
}


Utestet, men tyvstjålet (næsten) fra http://php.net/usort
Avatar billede erikjacobsen Ekspert
02. april 2007 - 15:09 #3
og det skal nok være

echo "\$array[$key]: " .$value["id"]." ".$value["antal"]." ".$value["name"] . "\n";
Avatar billede nicklasb Nybegynder
02. april 2007 - 15:13 #4
Jeg har kigget på usort, men kunne ikke få det til at virke.

Indsætter jeg cmp-funktionen og kører


print_r($array);
usort($array, "cmp");
print_r($array);


får jeg


Array (
    [0] => Array (
            [id] => 0
            [antal] => 5
            [navn] => B
        )
    [1] => Array (
            [id] => 1
            [antal] => 6
            [navn] => A
        )
    [2] => Array (
            [id] => 2
            [antal] => 3
            [navn] => D
        )
    [3] => Array (
            [id] => 3
            [antal] => 9
            [navn] => C
        )
)

Array (
    [0] => Array (
            [id] => 3
            [antal] => 9
            [navn] => C
        )
    [1] => Array (
            [id] => 2
            [antal] => 3
            [navn] => D
        )
    [2] => Array (
            [id] => 1
            [antal] => 6
            [navn] => A
        )
    [3] => Array (
            [id] => 0
            [antal] => 5
            [navn] => B
        )
)


Jeg vil helst have resultatet, som jeg har skrevet det oprindeligt - også med indeksene som de står. Problemer er at jeg får et array fra et eksternt program, som jeg helst ikke må rette i, men skal udskrive listen alfabetisk.
Avatar billede intenz Novice
02. april 2007 - 15:17 #5
Jeg har lige testet erikjacobsens kode. Den virker fint.
Du skal bare lige rette:
return strcmp($a["name"], $b["name"]);

til:
return strcmp($a["navn"], $b["navn"]);
Avatar billede erikjacobsen Ekspert
02. april 2007 - 15:20 #6
;) Jeg må vist have et engelsk tastatur ;)  Kig evt på http://php.net/uasort
Avatar billede nicklasb Nybegynder
02. april 2007 - 15:30 #7
Har fået den til at virke nu! Tusind tak.
Fandt også selv Eriks "tastefejl" - og fik det til at virke, men når jeg smed det på min oprindelige kode, hvor jeg selvføglelig havde kaldt den 'name', virkede det ikke - så vist mig der har lavet mest gøgl, når alt kommer til alt.

Men tusind tak - smid et svar.
Avatar billede erikjacobsen Ekspert
02. april 2007 - 15:34 #8
Ingen point til mig, tak.
Avatar billede nicklasb Nybegynder
02. april 2007 - 15:37 #9
Så lukker jeg igen. Endnu engang tak for hjælpen!
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