Avatar billede sthen Nybegynder
03. december 2008 - 13:06 Der er 18 kommentarer og
1 løsning

Sortering af output

Nedenstående script giver et output på skærmen soretert efter hvornår filerne er uploadet.
Hvorledes får jeg i stedet gjort sorteringen alfabetisk ??
Avatar billede sthen Nybegynder
03. december 2008 - 13:39 #1
Øh glemte vist lige at uploade scriptet - det kommer her:

<?php
$dir = "./";
if ($handle = opendir($dir)) {
  $filearray = array();
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          $filearray[$file] = filectime($dir.$file);
      }
  }
  closedir($handle);
}
arsort($filearray);

echo "<b>Find billeddatabase her:</b><br><br>";

foreach ($filearray AS $filename => $datetime) {
if($filename!="index.php") {

    echo "<a href=\"".$dir.$filename."\">".$filename."</a><br>\n";
}
}
?>
Avatar billede showsource Seniormester
03. december 2008 - 14:08 #2
hmm, arsort skulle jo netop sortere på key og ikke navnet?
Du kan evt. bytte om på navn og tid i dit array
$filearray[filectime($dir.$file)] = $file;
og så bruge sort($filearray)
Avatar billede dmdisco Nybegynder
03. december 2008 - 15:25 #3
brug evt. natsort() hvis du vil have 1,2,3,11,12 istedet for 1,11,12,2,3
Avatar billede sthen Nybegynder
03. december 2008 - 22:30 #4
>> showsource
Så får jeg blot en masse tal frem på skærmen, og ikke navnet på mapperne/filerne ???

scriptet ser ud således nu:

<?php
$dir = "./";
if ($handle = opendir($dir)) {
  $filearray = array();
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          $filearray[filectime($dir.$file)] = $file;
      }
  }
  closedir($handle);
}
sort($filearray);

echo "<b>Find billeddatabase her:</b><br><br>";

foreach ($filearray AS $filename => $datetime) {
if($filename!="index.php") {

    echo "<a href=\"".$dir.$filename."\">".$filename."</a><br>\n";
}
}
?>
Avatar billede yHec Novice
03. december 2008 - 23:16 #5
Du kune ogsp bruge scandir istedet... Den sorterer automatisk alfabetisk

foreach(scandir($dir) as $file) {
if ($file != "." && $file != "..") {
          $filearray[filectime($dir.$file)] = $file;
      }
}

Noget i den retning... Så får du et sorteret array.

http://dk.php.net/manual/en/function.scandir.php

/y
Avatar billede sthen Nybegynder
04. december 2008 - 11:15 #6
Får stadig blot en masse tal som output.
Jeg skal gerne have navnet på filer og mapper stående på skærmen i stedet.
Avatar billede erikjacobsen Ekspert
04. december 2008 - 11:21 #7
Det er slet ikke holdbart at bruge konstruktionen
  $filearray[filectime($dir.$file)] = $file;
for to forskellige filer kan sagtens have samme tidsstempel
Avatar billede sthen Nybegynder
04. december 2008 - 11:34 #8
Hvordan gør jeg så ?
Er ikke særlig stiv i dette !
Avatar billede sthen Nybegynder
04. december 2008 - 11:35 #9
Har prøvet dette, som desværre heller ikke sorterer korrekt:

<?php
if ($handle = opendir('./')) {
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != ".." && $file !="index.php") {
          echo "<a href=\"".$file."\" target=\"_blank\">".$file."</a><br>\n";
      }
  }
  closedir($handle);
}
?>
Avatar billede erikjacobsen Ekspert
04. december 2008 - 14:12 #10
Jamen, du skal ikke gøre noget. Koden fra 03/12-2008 13:39:31 er korrekt - den sorterer aftagende efter creation-time.
Avatar billede erikjacobsen Ekspert
04. december 2008 - 14:12 #11
Bemærk den første sætning fra showsource, som er helt korrekt. Du kan så glemme resten ;)
Avatar billede erikjacobsen Ekspert
04. december 2008 - 14:25 #12
Eller også er det mig, der ikke kan læse. Jeg mente at tro at der blev skrevet at du skulle bruge http://php.net/krsort
Avatar billede sthen Nybegynder
04. december 2008 - 14:40 #13
Hej Erik

Som jeg skrev ønsker jeg ikke sorteret efter creation-time, men en alfabetisk sortering efter filnavn.
Avatar billede erikjacobsen Ekspert
04. december 2008 - 15:24 #14
Og så skal du bruge http://php.net/krsort
Avatar billede sthen Nybegynder
05. december 2008 - 15:46 #15
Lukker
Kan ikke få skidtet til at makke ret
Avatar billede erikjacobsen Ekspert
05. december 2008 - 17:51 #16
Jeg vil tro, den har kan. Der kan være noget sjov, hvis man har filnavne eller kataloger udelukkende med cifre.

<?php
$dir = "./";
if ($handle = opendir($dir)) {
  $filearray = array();
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          $filearray[$file] = filectime($dir.$file);
      }
  }
  closedir($handle);
}

krsort($filearray);

echo "<b>Find billeddatabase her:</b><br><br>";

foreach ($filearray AS $filename => $datetime) {
if($filename!="index.php") {

    echo "<a href=\"".$dir.$filename."\">".$filename."</a><br>\n";
}
}
?>
Avatar billede showsource Seniormester
05. december 2008 - 18:21 #17
Tror også denne vil virke,

<?php
$dir = "./";
if ($handle = opendir($dir)) {
  $filearray = array();
  while (false !== ($file = readdir($handle))) {
      if ($file == "." || $file == ".." || $file == "index.php") {
      continue;
      }
          $filearray[] = array($file, filectime($dir.$file));
  }
  closedir($handle);
}

sort($filearray);

echo "<b>Find billeddatabase her:</b><br><br>";

foreach ($filearray as $key => $fileinfo) {

    echo "<a href=\"".$dir.$fileinfo[0]."\">".$fileinfo[0]."</a><br>\n";

}

?>
Avatar billede sthen Nybegynder
06. december 2008 - 09:42 #18
>> erikjacobsen

Tak for hjælpen - det virkede - dog med den undtagelse at jeg var nødt til at anvende ksort(), da krsort() sorterer i omvendt alfabetisk rækkefølge.

Vi du som sædvanlig ikke ha' points??
Avatar billede erikjacobsen Ekspert
06. december 2008 - 12:10 #19
nej tak
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

IT-JOB