Avatar billede hyperguy Nybegynder
02. august 2004 - 09:03 Der er 10 kommentarer og
1 løsning

Sortering af et array

Jeg har et array som jeg skal have sorteret. Det ser sådan her ud

Jeg skal have det sorteret det efter de sidste keys, dvs id, info add_date eller navn.

Nogle ideer til hvordan det kan laves ? Synes ikke jeg kan finde en function der kan sortere på den måde jeg skal bruge.

Array
(
    [0] => Array
        (
            [id] => 100500001
            [info] => ST340014A (Seagate)
            [add_date] => 2004-06-14
            [navn] => Ikke udlånt
        )

    [1] => Array
        (
            [id] => 100500002
            [info] => ST340014A (Seagate)
            [add_date] => 2004-06-14
            [navn] => Kabinet 47
        )

    [2] => Array
        (
            [id] => 100500003
            [info] => ST340014A (Seagate)
            [add_date] => 2004-06-14
            [navn] => Kabinet 46
        )

    [3] => Array
        (
            [id] => 100500004
            [info] => ST340014A (Seagate)
            [add_date] => 2004-06-14
            [navn] => Kabinet 49
        )
}
Avatar billede erikjacobsen Ekspert
02. august 2004 - 09:25 #1
Du skal nok bruge http://php.net/usort

Men jeg forstår ikke hvordan du skal have det sorteret?
Avatar billede hyperguy Nybegynder
02. august 2004 - 09:49 #2
Det skal være sådan at jeg kan sortere efter id, stigende og faldende.
Men fordi det er et array, inde i et andet array ved jeg ikke hvordan det skal laves.
Avatar billede erikjacobsen Ekspert
02. august 2004 - 09:56 #3
Ok, hvis det kun er id du skal sortere på er det nemt nok. De to sammenligningsfunktioner
giver voksende og aftagende:

  $vare[] = Array("id"=>7913,"navn"=>"sodavand1");
  $vare[] = Array("id"=>7513,"navn"=>"sodavand2");
  $vare[] = Array("id"=>9913,"navn"=>"sodavand3");
  $vare[] = Array("id"=>5913,"navn"=>"sodavand4");
  $vare[] = Array("id"=>7914,"navn"=>"sodavand5");

  function sammenlign1($a,$b) {
    return $a['id']-$b['id'];
  }

  function sammenlign2($a,$b) {
    return $b['id']-$a['id'];
  }

  usort($vare,'sammenlign2');

  print_r($vare);
Avatar billede hyperguy Nybegynder
05. august 2004 - 12:46 #4
Jeg skal også bruge det på navn, altså bogstaver i det hele taget.. Nogle ideer til hvordan det kan laves ?
Avatar billede erikjacobsen Ekspert
05. august 2004 - 12:48 #5
Ja, hvis du kan forklare det, så jeg kan forstå hvordan du vil sortere ;)
Avatar billede hyperguy Nybegynder
05. august 2004 - 12:58 #6
Det skal laves sådan jeg kan sortere det på navn, inde i det indereste array. På den måde at når jeg laver en print_r på arrayet er det sorteret efter det indereste array af navn f.eks. Det er lidt svært at forklar. hehe. Men håber du forstår det.
Avatar billede erikjacobsen Ekspert
05. august 2004 - 13:35 #7
Men i det tilfælde skal du så ikke sortere efter id, men alene navn? Skal det
sorteres case-sensitivt eller ikke?
Avatar billede hyperguy Nybegynder
05. august 2004 - 13:47 #8
Det skal være sådan jeg kan sorter efter alle felter i mit indereste array og lige meget med case-sensitiv, det er ikke nødvendigt
Avatar billede erikjacobsen Ekspert
05. august 2004 - 14:03 #9
Godt nok, jeg hopper ud i det. Prøv denne som argument til usort:

function sammenlign3($a,$b) {
    return strcmp($b['navn'],$a['navn']);
  }
Avatar billede hyperguy Nybegynder
05. august 2004 - 14:10 #10
Det virkede, lige ved første test i hvert fald. Tror også det virker ved det som jeg skal bruge det til. Jeg tester det lige godt igennem og så vender jeg tilbage. Tak for nu.
Avatar billede hyperguy Nybegynder
20. oktober 2005 - 08:03 #11
lukket
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