07. juni 2004 - 22:29
Der er
7 kommentarer og 2 løsninger
Sortering af array
Hej! Jeg har et array, $filearray, hvori der ligger fil- og mappenavne, fx: $filearray[0] => "fil.jpeg" $filearray[1] => "Mappe" $filearray[2] => "fil2.mpeg" Min spørgsmål er så hvordan sorterer array'et så først kommer mapperne (i alfabetisk orden) og dernæst filerne (i alfabetisk orden). Dvs: $filearray[0] => "Mappe" $filearray[1] => "fil.jpeg" $filearray[2] => "fil2.mpeg"
Annonceindlæg fra Visma Enterprise
Du kan bruge sort(), men så bliver du nød til at dele arrayet op i 2 del arrays
the_gost: Det ved jeg, men mit problem er at dele det op i 2 arrays. Det må kunne gøres på en eller anden smart måde.
Hvis det ikke at alt for stort et array vi snakket om, så kan du jo dele det op, sortere det, og så smække det sammen i 1 igen!!!
Hvis vi går ud fra, du ikke bruger punktum i dine mappenavne: foreach($filearray as $var) { if (strpos($var, '.') === false) $mapper[] = $var; else $filer[] = $var; } sort($mapper); sort($filer); $filearray = array_merge($mapper, $filer);
Det kan nu gøres som spørgeren ønsker - hvis vi antager at en mappenavn ikke indeholder et punktum, hvad det nu gerne må. <? $files[]="mappe"; $files[]="gmappe"; $files[]="kfil.php"; $files[]="xmappe"; $files[]="bmappe"; $files[]="vmappe"; $files[]="ymappe"; $files[]="Afil.php"; $files[]="ffil.php"; $files[]="Gfil.php"; $files[]="efil.php"; $files[]="amappe"; $files[]="zfil.php"; $files[]="qfil.php"; function mysort($a,$b) { $a=strtolower($a); $b=strtolower($b); $a1=ereg('\.',$a); $b1=ereg('\.',$b); if ($a1 && !$b1) return 1; if ($b1 && !$a1) return -1; return strcmp($a,$b); } usort($files,'mysort'); for ($i=0;$i<count($files);$i++) { print "$i {$files[$i]}<br>\n"; } ?>
Hej igen Jeg så på Jeres svar og flettede dem ind i min kode således: $i=0; $s=0; while($file = readdir($dir)){ If($file != "." && $file != ".."){ $file_path = $current_dir . "/" . $file; If(filetype($file_path)=="dir"){ $dirarray[$s] = $file; $s++; } else{ $filearray[$i] = $file; $i++; } } } sort($filearray); reset($filearray); sort($dirarray); reset($dirarray); $filearray = array_merge($dirarray, $filearray); Ved ikke om det noget slamkode, men det virker. Håber det er i orden i deler pointene (the_gost du var hurtigst og forklarede overordnet hvad teknikken var og detox du gav et udførligt eksempel) erikjacobsen: Du kan forståeligt nok ikke huske mig, men tit og ofte (i Ekspertens unge dage) har du svaret på mine spørgsmål gratis og da jeg kan se du stadig gør det tager jeg endnu engang hatten af og roser dig for dit arbejde =)
sort($mapper); sort($filer); i mit eks kan evt. udskiftes med: natcasesort($mapper); natcasesort($filer); alt efter hvordan du ønsker dem sorteret. Men eriks løsning er nu osse ret elegant.
Det er klart bedst at bruge filetype, og ikke basere dig på at navnet siger om det er en fil eller et katalog. Næh, jeg husker nok ikke hvert og et spørgsmål jeg har svaret på i tidens løb ;)
Ja, klart bedre tilgang med filtype() :o)
Vi tilbyder markedets bedste kurser inden for webudvikling