Avatar billede hvidlogspusher Nybegynder
16. marts 2003 - 15:27 Der er 9 kommentarer

sort problemer

hvis jeg har nogen lignende det her:
3,jubii_dk
20_yahoo_com

altså de 2 strenge i et array og jeg kører rsort på arrayet så mener php at jubii skal listes højere end yahoo selvom der står 20 foran yahoo og 3 foran jubii... hvordan kan jeg sort den rigtigt ?
Avatar billede erikjacobsen Ekspert
16. marts 2003 - 15:29 #1
Ved at skrive

000003,junbiiii
000020,yhooo..
Avatar billede hvidlogspusher Nybegynder
16. marts 2003 - 15:31 #2
usort($arrayet, 'strnatcasecmp');

den har jeg kunne sjuse mig frem til men der vender det ehle bare forkert
Avatar billede hvidlogspusher Nybegynder
16. marts 2003 - 15:32 #3
erikjacobsen det har jeg ikke mulighed for da det er noget database noget...
Avatar billede tangveje Nybegynder
16. marts 2003 - 15:37 #4
Prøv med uksort() således, ikke lige sikker, men prøv :)

uksort($arrayet, 'strnatcasecmp');
Avatar billede erikjacobsen Ekspert
16. marts 2003 - 15:38 #5
Hvis det er noget fra en database, så er du da også selv
ude om det, hvis du propper flere ting i samme felt. Det
gør man ikke. Og gør du det rigtigt, kan du bare få databasen
til at sortere for dig.
Avatar billede hvidlogspusher Nybegynder
16. marts 2003 - 15:39 #6
i know i know, så kan du få den lange forklaring, databasen indeholder en masse tabler med statiske fra forskellige domæner, jeg skal have samlignet nogle af talene fra de forskellige tabler, det er derfor jeg har valgt at gøre det på den måde
Avatar billede erikjacobsen Ekspert
16. marts 2003 - 15:58 #7
Fint nok, men det er ikke en særlig smart måde. Over and out.
Avatar billede hvidlogspusher Nybegynder
16. marts 2003 - 17:08 #8
har du en bedre ide ?
Avatar billede jakoba Nybegynder
17. marts 2003 - 13:14 #9
det er stadig en usort der skal til. det bliver bare en klumret og langsom en.

<?php

function sammenlign ( $a, $b ) {
    // $a og $b er feltværdier (eg '3,jubii_dk' og '20,yahoo_com')

    $arr_a = split( ",", $a, 2 );
    $arr_b = split( ",", $b, 2 );
        // se: http://dk.php.net/manual/en/function.explode.php

        // sammenlign tal
    if ( 0+$arr_a[0] < 0+$arr_b[0] ) {
        return 1;
    }
    if ( 0+$arr_a[0] > 0+$arr_b[0] ) {
        return -1;
    }

        // tallene var ens så vi må sammenligne på navnet
    if ( $arr_a[1] < 0+$arr_b[1] ) {
        return 1;
    }
    if ( $arr_a[1] > 0+$arr_b[1] ) {
        return -1;
    }

    return 0;    // $a og $b er helt ens.
}

$feltarray = // udfyldes med alle felterne

$sorteret_fetarray = usort( $feltarray, "sammenlign" );

?>

men det er en elendig løsning. hvis der er mange records der skal sorteres tager det hulens meget cputid.

Overvej evt at konvertere hele din database til et ordentligt format, som erikjacobsen også er inde på.

mvh JakobA
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