Avatar billede komputerdk Mester
13. februar 2009 - 03:12 Der er 5 kommentarer og
1 løsning

sorter i et array med 2 dimensioner

hej

jeg har en sidde med en hel masse felter hvor brugeren skal skrive i hvilken rækkefølge de er.. Jeg bruger et hidden felt med variablen i for at tjekke hvor mange felter der er :

anyway , min kode er:


foreach ($_GET as $key => $val){
if($key !="i" && $val > 0) //så tæller i (tæller enskaben) ikke med..
        {
        $liste[$x]["nr"] = $val;
        $liste[$x]["felt"] = $key;
        echo "X: $x - Key: $key - Val $val <br>" ;   
        $x++;
        }   
        else { $x=$x;}
    }
   

   

så kan data se sådan ud (yep jeg ved godt at brugeren kan have samme værdi nr, men mindre detalje)

[0]
nr => 4
felt => Navn

[1]
nr => 2
felt => email

[2]
nr => 4
felt =>Efternavn


, det skal sorteres efter Nr først og så navn - jeg har kigget på array_multisort , men den bliver ved med at give fejl:

array_multisort($nr,SORT_ASC,$felt,SORT_ASC, $liste);

what to do ?
Avatar billede arne_v Ekspert
13. februar 2009 - 04:04 #1
Lidt eksperimenteret får det til at virke med usort:

<?php
function cmp($a, $b) {
    if($a['nr'] < $b['nr']) {
        return -1;
    } else if($a['nr'] > $b['nr']) {
        return 1;
    } else {
        if($a['felt'] < $b['felt']) {
            return -1;
        } else if($a['felt'] > $b['felt']) {
            return 1;
        } else {
            return 0;
        }
    }
}

$liste = array(array('nr' => 4, 'felt' => 'Navn'), array('nr' => 2, 'felt' => 'email'), array('nr' => 4, 'felt' => 'Efternavn'));
print_r($liste);
print "<br>\r\n";
usort($liste, "cmp");
print_r($liste);
print "<br>\r\n";
?>
Avatar billede komputerdk Mester
13. februar 2009 - 13:29 #2
er der ikke en anden måde end

$liste = array(array('nr' => 4, 'felt' => 'Navn'), array('nr' => 2, 'felt' => 'email'), array('nr' => 4, 'felt' => 'Efternavn'));

for der er måske 50 mulige felter..
Avatar billede arne_v Ekspert
13. februar 2009 - 14:55 #3
Den linie er kun for at lave nogle test data.

Du konstruerer din $liste ligesom du hele tiden har gjordt og kalder usort med cmp funktionen paa den.
Avatar billede komputerdk Mester
13. februar 2009 - 23:09 #4
Takker  - vil du lave et svar ?

hmm, troede at array_multisort også kunne, men det andet virker :O
Avatar billede arne_v Ekspert
13. februar 2009 - 23:11 #5
Det er ogsa muligt at array_multisort kan, men jeg kunne ikke finde ud af det.

Og svar.
Avatar billede komputerdk Mester
14. februar 2009 - 09:27 #6
det virker - det er det vigtigste ...

tror vist også at multisort er lidt mystisk  (har støt på flere der ikke kan få den til at virke...hmm)
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