Gå til innhold

loop som sorterer etter filnavn


Anbefalte innlegg

Jeg har denne løkken som jeg bruker på hjemmesiden min:

 

$directory = opendir("poetry");
$this_filename = $_SERVER['PHP_SELF'];
while (false !== ($file = readdir($directory))) {
 if (!(($file == ".") OR ($file == ".."))) {
 	$file_extension = strrchr($file, '.');
 	$filesplit = explode(".", $file);
 	for($index = 0; $index < count($file); $index++) {
   echo("<a href=\"$this_filename?action=show_poetry&name=$file\">$filesplit[0]</a><br>");
 	}
 }
}
closedir($directory);

 

det jeg har funnet ut er at denne løkken bare ramser opp alle filene som er i $directory uten å ta noe særlig hensyn til alfabetisk sortering. noen som vet hvordan jeg skal gjøre det?

Lenke til kommentar
Videoannonse
Annonse

Når det gjelder koden din studerte jeg den ikke så nøye, så feiltolkninger kan forekommer. Det jeg imidlertid la merke til, er måten du beregner filnavnet på. Denne teknikken vil ikke fungere for filnavn som f.eks. "dette.er.en.fil.med.mange.punktum.txt", da vil nemlig filnavnet bli "dette".

 

Bortsett fra det er det bare et par småting i HTML-koden.

 

Så til en løsning på problemet.

Alternativ 1

Legg inn i et array og bruk funksjonen array_multisort. Da kan du sortere på forskjellige nøkler(keys).

 

Alternativ 2

Dersom du benytter PHP5 kan det være interessant å se på scandir. Den kan gjøre nøyaktig det du ber etter. Den sorterer alfabetisk i stigende rekkefølge (som standard). Det eneste du trenger å kode er løkka for å iterere gjennom arrayet.

 

oi, kom i fare for å kode det selv. Denne skal gjøre sånn ca. det du er ute etter.

<?php
//PHP5
$mappe = "poetry";
$filer = scandir($mappe);

$this_filename = $_SERVER['PHP_SELF'];
foreach($filer as $fil){
   if(!is_dir($fil)){
       $filetternavn=substr($fil,strrpos($fil,".")+1);
       $filnavn=substr($fil,0,(strlen($fil)-strlen($filetternavn)-1));
       echo('<a href="'.$this_filename.'?action=show_poetry&name='.$fil.'">'.$filnavn.' ('.$filetternavn.')</a><br />'."\n");
   }
}
?>

Her lister jeg ut alle filer og kataloger til et array. Deretter kjører jeg en foreach-løkke for å skrive ut filene.

Her sjekker jeg først at det ikke er en katalog, deretter finner jeg $filetternavn og $filnavn (basert på lengden til $filetternavn). Deretter skriver jeg ut ca. det samme som du ønsket (filetternavn kan du fjerne, men det må fortsatt beregnes). Har modifisert HTML-koden slik at den er gyldig (forutsatt at den plasseres i f.eks. en paragraf <p>).

 

Til slutt. Vær ops på at ikke alle filer har filetternavn. (Kod selv :p )

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...