Avatar billede computopic Nybegynder
21. januar 2003 - 17:52 Der er 17 kommentarer og
1 løsning

sotering..

Hvordan kan jeg få soteret nedenstående array efter navn? ([navn])

Sådan ser det ud:
Array
(
    [0] => Array
        (
            [ejendomsnummer] => 225
            [typekode] => 8
            [handling] => tilføj
            [navn] => Albertslund Ungdomsboliger
        )

    [1] => Array
        (
            [ejendomsnummer] => 225
            [typekode] => 2
            [handling] => tilføj
            [navn] => Albertslund Ungdomsboliger
        )

    [2] => Array
        (
            [ejendomsnummer] => 225
            [typekode] => 1
            [handling] => tilføj
            [navn] => Albertslund Ungdomsboliger
        )
Avatar billede rzj Nybegynder
21. januar 2003 - 18:03 #1
Avatar billede kube Nybegynder
21. januar 2003 - 18:04 #2
det er en function der hedder sort.
http://www.php.net/manual/en/function.sort.php
Avatar billede kube Nybegynder
21. januar 2003 - 18:05 #3
og så kan dit flag være SORT_STRING - så bliver det sorteret efter strengen..
Avatar billede kube Nybegynder
21. januar 2003 - 18:07 #4
jeg tror faktisk det er bedre med asort!!!!
Avatar billede rzj Nybegynder
21. januar 2003 - 18:09 #5
kube>>ja fordi den beholder associeringen efter sortering ;-)
Avatar billede jakoba Nybegynder
21. januar 2003 - 18:34 #6
Det vi har er et array af arrays, hvor første index er numerisk og andet index er associativt. så er det ikke hele arrays der skal flyttes rundt på så det array hvis ['navn'] celle er mindst står først.

det gøres med usort funktionen hvor du så selv skal definere en sammenligningsfunktion til at beslutte om eet array er 'større' end et andet.
se: http://dk.php.net/manual/en/function.usort.php

fx:
function cmp-ejendoms-data ( $a, $b ) { // $a og $b er hele arrays
    if ( $a['navn'] == $b['navn'] ) return 0;  // de er ens
    if ( $a['navn'] > $b['navn'] ) return 1;  // $a er 'størst'
    return -1;    // $b er 'størst'
}

usort( $dit_store_array_af_arrays, "cmp-ejendoms-data" );

mvh JakobA
Avatar billede computopic Nybegynder
21. januar 2003 - 18:51 #7
>> Jacoba

Hvorfor er der 2 array variabler? JEg har kun en.. $ejendomsarray
Du skriver om $a og $b
Avatar billede jakoba Nybegynder
21. januar 2003 - 19:13 #8
hver celle i dit array $ejendomsarray er igen en variabel. blot en variabel med et sært navn: $ejendomsarray[0], $ejendomsarray[1], ...
parametrene $a og $b ræpræsenterer så de to celler som skal sammenlignes denne gang.
Avatar billede jakoba Nybegynder
21. januar 2003 - 19:16 #9
Og jo hver enkelt celle i $ejendomsarray er da et array.
$ejendomsarray[0] er det array der dannes med:
    array ( 'ejendomsnummer' => 225
            'typekode' => 8
            'handling' => 'tilføj'
            'navn' => 'Albertslund Ungdomsboliger'
          );
Avatar billede computopic Nybegynder
27. januar 2003 - 12:38 #10
VIl du mene at det skal se sådan her ud?

function cmp-ejendoms-data ( $fornyelsesarray[0], $fornyelsesarray[1] ); { // $a og $b er hele arrays
    if ( $fornyelsesarray[0]['navn'] == $fornyelsesarray[1]['navn'] ) return 0;  // de er ens
    if ( $fornyelsesarray[0]['navn'] > $fornyelsesarray[1]['navn'] ) return 1;  // $a er 'størst'
    return -1;    // $b er 'størst'
}

usort( $fornyelsesarray, "cmp-ejendoms-data" );
Avatar billede computopic Nybegynder
27. januar 2003 - 12:44 #11
JEg får denne fejl:
Parse error: parse error, expecting `'('' in c:\apache\htdocs\projekt01\includes\forny.inc.php on line 124

Denne linje er den linje hvor funktionen starter..
Avatar billede jakoba Nybegynder
27. januar 2003 - 12:57 #12
nej. istedet for $fornyelsesarray[0] og $fornyelsesarray[1] skal der stå et par variabelnavne, og de variabelnavn benyttes indeni funktionen. det er parametre.

den foruddefinerede usort funktion vil så selv sørger gor at de parameter-variable står for fx $fornyelsesarray[0] og $fornyelsesarray[1] når det er de to underarrays der skal sammenlignes.

function cmp-ejendoms-data ( $den_ene_celle, $den_anden_celle ); { // $a og $b er hele arrays
    if ( $den_ene_celle['navn'] == $den_anden_celle['navn'] ) return 0;  // de er ens
    if ( $den_ene_celle['navn'] > $den_anden_celle['navn'] ) return 1;  // $a er 'størst'
    return -1;    // $b er 'størst'
}

mvh JakobA
Avatar billede computopic Nybegynder
27. januar 2003 - 13:04 #13
Men lige så snart jeg sætter funktionen ind i min kode kommer der fejl.. (ovenstående) ..
Avatar billede computopic Nybegynder
27. januar 2003 - 13:05 #14
Der burde da ikke komme fejl så længe at funktionen ikke er kaldt:
usort( $fornyelsesarray, "cmp-ejendoms-data" );
..
Avatar billede computopic Nybegynder
27. januar 2003 - 13:07 #15
Men bare det at funktions scriptet står i koden.. så giver den fejl i den linje hvor funktionen starter..
Avatar billede computopic Nybegynder
27. januar 2003 - 13:18 #16
Har fundet fejlen.. der må ikke være bindestreger i funktionsnavnet..
Avatar billede jakoba Nybegynder
27. januar 2003 - 13:25 #17
og der er en til fejl. i linien
function cmp-ejendoms-data ( $den_ene_celle, $den_anden_celle ); { // $a og $b er hele arrays

skal der IKKE stå ; foran { (den krøllede parentes begynd).

function cmp_ejendoms_data ( $den_ene_celle, $den_anden_celle ) { // $a og $b er hele arrays
Avatar billede computopic Nybegynder
27. januar 2003 - 13:36 #18
cool.. der virker.. takker
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