Avatar billede net-base.dk Nybegynder
20. april 2006 - 14:28 Der er 25 kommentarer og
1 løsning

array sort..

Hey.

Sidder og er ved at lave et lille system som skal kunne vise alle mine filer ud fra mapper. men har det problem at når jeg læser indholdet af en mappe bliver det ikke sorteret, fint tænkte jeg bruger bare funktionen sort() til at sortere mit array med. (skal lige sige at i readdir gemmer jeg informationerne i et array) Men den sertore det på den måde at den først tage alle med UPPERCASE først og så LOWERCASE bagefter. okay så lavede jeg et felt mere i mit array som indeholdte navnet i UPPERCASE kun.

Nu skal jeg så bare bruge en sort funktion som kan sortere mit array ud fra en KEY som jeg bestemmer! hvad hedder denne funktion?
Avatar billede codebase Praktikant
20. april 2006 - 14:40 #1
ksort
Avatar billede coderdk Praktikant
20. april 2006 - 14:43 #2
Avatar billede coderdk Praktikant
20. april 2006 - 14:43 #3
(natcasesort kan du bruge i stedet for at lave alle til uppercase)
Avatar billede net-base.dk Nybegynder
20. april 2006 - 15:04 #4
Nu har jeg prøvet med natcasesort() og det ser ikke ud til at virke...
Avatar billede erikjacobsen Ekspert
20. april 2006 - 15:07 #5
Hvordan bruger du natcasesort() ?
Avatar billede net-base.dk Nybegynder
20. april 2006 - 15:09 #6
efter jeg har lavet arrayet så laver jeg en natcasesort($filearray);
Avatar billede coderdk Praktikant
20. april 2006 - 15:10 #7
Hvad sorterer du? Det skal ikke være dit array med keys - Det skal være sådan som du prøvede først - Det virker skam :)
Avatar billede net-base.dk Nybegynder
20. april 2006 - 15:33 #8
jeg bruger natcasesort($filearray); til at sortere mit array med, men det bliver ik sorteret...
Avatar billede erikjacobsen Ekspert
20. april 2006 - 15:41 #9
Hvordan bruger du natcasesort() ?  Vis din kode. Du skal ikke efterfølgende bare bruge en for-løkke, som man kunne fristes til at tro. Læs linket fra coderdk grundigt ;)
Avatar billede net-base.dk Nybegynder
20. april 2006 - 15:47 #10
En lille stump kode...

if( !is_dir($dir) ) {
        echo "false";
} else {
        echo "true<br>";

        $handle = opendir($dir);

        while( false !== ( $file = readdir( $handle ) ) ) {

                if( $file != "." && $file != ".." ) {
                        $filearray[] = array("name"=>$file);
                }
        }
        natcasesort($filearray);

        echo "<table width='100%' cellpadding='0' cellspacing='0' border='1'>";

        for( $x=0 ; $x<count($filearray) ; $x++ ) {
                echo "<tr>";
                echo "<td>".$filearray[$x]["name"]."</td>";
                echo "</tr>";
        }



        echo "</table>";

echo "<pre>";
print_r($filearray);
}
Avatar billede coderdk Praktikant
20. april 2006 - 16:06 #11
if( !is_dir($dir) ) {
        echo "false";
} else {
        echo "true<br>";

        $handle = opendir($dir);

        while( false !== ( $file = readdir( $handle ) ) ) {

                if( $file != "." && $file != ".." ) {
                        $filearray[] = $file;
                }
        }
        natcasesort($filearray);

        echo "<table width='100%' cellpadding='0' cellspacing='0' border='1'>";

        for( $x=0 ; $x<count($filearray) ; $x++ ) {
                echo "<tr>";
                echo "<td>".$filearray[$x]."</td>";
                echo "</tr>";
        }



        echo "</table>";

echo "<pre>";
print_r($filearray);
}
Avatar billede net-base.dk Nybegynder
20. april 2006 - 16:15 #12
Arrayet skal være et 3D array for skal have bygget videre på det så det kan tjekke hvornår filen sidste er blevet opdateret samt om det er en mappe eller fil, så skal have et 3D array.

Men kan det ik lade sig gøre må det jo blive på den her måde...
Avatar billede net-base.dk Nybegynder
20. april 2006 - 16:18 #13
coderdk den måde du har lavet det på der updater ikke key nummeret så nu sortere den navne rigtigt men de beholder stadig deres gamel key ID... kan self løbe arrayet igennem med en foreach nu...
Avatar billede coderdk Praktikant
20. april 2006 - 16:57 #14
Så skal du bruge usort: http://dk.php.net/usort
Avatar billede erikjacobsen Ekspert
20. april 2006 - 17:11 #15
Jah, ideen er lidt at bruge foreach - ingen grund til en forløkke, eller hvad ??
Avatar billede erikjacobsen Ekspert
20. april 2006 - 17:23 #16
Og du skal have flere oplysninger med .... ok.

          $filearray[$file] = array("name"=>$file,"andet"=>"noget");

og så bruge ksort eller uksort
Avatar billede net-base.dk Nybegynder
20. april 2006 - 18:52 #17
Okay det kigger jeg lige på...
Avatar billede net-base.dk Nybegynder
20. april 2006 - 19:00 #18
Mit array ser faktisk sådan her ud.
Array
(
    [0] => Array
        (
            [file] => TXTfiler
            [folder] => 1
        [lastmodified] => 0000:00:00 00:00:00
        )
    [1] => Array
        (
            [file] => Billeder
            [folder] => 1
        [lastmodified] => 0000:00:00 00:00:00
        )
    [2] => Array
        (
            [file] => file3.txt
            [folder] => 0
        [lastmodified] => 0000:00:00 00:00:00
        )
    [3] => Array
        (
            [file] => file4.txt
            [folder] => 0
        [lastmodified] => 0000:00:00 00:00:00
        )
}

Jeg vil så gerne kunne sortere på at alle dem med folder=1 (kunne også være 0) kommer først og derefter sortere den så i filnavne så de står alfabetisk så man faktisk får alle mapper øvers i navne orden og neden unden alle filer i navne orden... Kan man lave en sådan funktion?
Avatar billede net-base.dk Nybegynder
20. april 2006 - 19:04 #19
eller så må jeg skrive en funktion som lave sortere dem, skulle ik være noget problem, men ville være fedt hvis der var en funktion som kunne gøre det...
Avatar billede coderdk Praktikant
20. april 2006 - 19:53 #20
Det er der. Den hedder usort, som jeg skrev før. http://dk.php.net/usort

function cmp( $a, $b )
{
  if ( strtoupper( $a['file'] ) == strtoupper( $b['file'] ) ) return 0;
  return ( strtoupper( $a['file'] ) > strtoupper( $b['file'] ) ? 1 : -1 );
}
usort( $filearray, "cmp" );
Avatar billede net-base.dk Nybegynder
21. april 2006 - 09:40 #21
Okay... det må jeg lige kigge på...
Avatar billede erikjacobsen Ekspert
21. april 2006 - 09:48 #22
I den cmp-funktion kan du også lave en sammenligning på dit folder-felt, så du kan få kataloger først.
Avatar billede net-base.dk Nybegynder
26. juni 2006 - 10:46 #23
Smid nogle svar så deler jeg point.
Avatar billede coderdk Praktikant
26. juni 2006 - 13:35 #24
Ok :)
Avatar billede erikjacobsen Ekspert
26. juni 2006 - 14:46 #25
Ingen point til mig, tak.
Avatar billede net-base.dk Nybegynder
26. juni 2006 - 15:15 #26
okay tak for jeres hjælp.
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