Avatar billede jenz3n Nybegynder
06. januar 2010 - 15:21 Der er 6 kommentarer og
1 løsning

Arrangering af data i array

Hej alle,

Dataene ser sådan ud og vil altid være sorteret på samme måde, altså ikke efter ID, men efter hvem der ligger under hvem:

array(
    array('id' => 1, 'lvl' => 1, 'caption' => 'Test'),
    array('id' => 2, 'lvl' => 2, 'caption' => 'Test2'),
    array('id' => 3, 'lvl' => 2, 'caption' => 'Test3'),
    array('id' => 4, 'lvl' => 1, 'caption' => 'Test4'),
    array('id' => 5, 'lvl' => 2, 'caption' => 'Test5'),
);

Og de skal arrangeres efter lvl, så de ender sådan:

array(
    'Test' => array(
        'Test2' => 2
        'Test3' => 3
    ),
    'Test4' => array(
        'Test5' => 5
    ),
);


Hvordan opnår jeg nemmest det?

På forhånd tak
Avatar billede michael_stim Ekspert
06. januar 2010 - 15:48 #1
Er sikker på du finder hvad du søger på php.net:
http://se2.php.net/manual/en/function.usort.php
Avatar billede jenz3n Nybegynder
06. januar 2010 - 16:03 #2
Ja det er jeg ret sikker på. De er jo allerede sorteret.
Avatar billede michael_stim Ekspert
06. januar 2010 - 16:07 #3
Kig i kommentarene.
Avatar billede acore Ekspert
06. januar 2010 - 16:12 #4
Tja, her er et bud - forudsætter du har data i $ai og ønsker med i $ao - ikke testet:

foreach($ai as $item)
{
    if ($item['lvl'] == 1)
    {
        $cap1 = $item['caption'];
        $ao[$cap1] = array();           
    }
    else if ($item['lvl'] == 2 && isset($cap1))
    {
        $ao[$cap1][$item['caption']] = $item['id'];            
    }
    else
    {
        // Error
    }
}
Avatar billede acore Ekspert
06. januar 2010 - 16:13 #5
Det er ikke en sortering, det er strukturen af data, der skal ændres. Så usort duer ikke tror jeg.
Avatar billede jenz3n Nybegynder
06. januar 2010 - 16:18 #6
acore har helt ret, og såfremt hans kode virker, er det et okay svar. Jeg kunne dog godt selv have lavet den kode der, jeg havde nok bare håbet på noget mere elegant.
Avatar billede acore Ekspert
07. januar 2010 - 09:46 #7
Jeg er enig i at det ikke er elegant. Tror dog ikke du lige kan finde en funktion, der kan bruges. Det er for "speciel" en opgave.

Implementeringen kan gøres mere "elegant" hvis du lægger det i en funktion - synes jeg.
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