Avatar billede mrbs Nybegynder
06. januar 2006 - 11:48 Der er 11 kommentarer og
1 løsning

Sorter efter filnavn PHP

Dette script skriver alle filerne i en angivet mappe... Hvordan får man dem til at skrive filerne efter alfabetisk orden... Som det er nu, kommer de bare lidt tilfældigt...

<?php
$dir = "../deadlines";

if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      $i = 0;
      while (($file = readdir($dh)) !== false) {
          if($file != "." && $file != ".."){
                $i++;
                echo "<a href=\"$dir/$file\">$file</a><br /><br />\n";
          }
      }
   
      closedir($dh);
  }
}
?>
Avatar billede polle007 Nybegynder
06. januar 2006 - 12:30 #1
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      $files = array();
      while (($file = readdir($dh)) !== false) {
          if($file != "." && $file != ".."){
                $files[] = $file;
          }
      }

      sort(&$files);
      foreach($files as $file){
          echo "<a href=\"$dir/$file\">$file</a><br /><br />\n";
      }
 
      closedir($dh);
  }
Avatar billede mrbs Nybegynder
06. januar 2006 - 12:58 #2
Hmmm... Nej det virker tilsyneladende ikke...

<?php
$dir = "../deadlines";

if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      $files = array();
      while (($file = readdir($dh)) !== false) {
          if($file != "." && $file != ".."){
                $files[] = $file;
          }
      }

      sort(&$files);
      foreach($files as $file){
          echo "<a href=\"$dir/$file\">$file</a><br /><br />\n";
      }

      closedir($dh);
  }
?>
Avatar billede mr-kill Nybegynder
06. januar 2006 - 14:40 #3
Hvad med dette?

<?php
$dir = "./deadlines";

if (is_dir($dir))
{
    if ($dh = opendir($dir))
    {
        $files = array();
        while (($file = readdir($dh)) !== false)
        {
                  if($file != "." && $file != "..")
            {
                    $files[] = $file;
                  }
              }

              sort(&$files);
              foreach($files as $file)
        {
                  echo "<a href=\"$dir/$file\">$file</a><br /><br />\n";
              }

              closedir($dh);
    }
}
?>
Avatar billede mrbs Nybegynder
06. januar 2006 - 15:06 #4
Det virker ikke... Der er ingen fejlmeddelelse eller noget - den viser bare ingenting...
Avatar billede mr-kill Nybegynder
06. januar 2006 - 15:13 #5
Prøve dette, så vi kan finde ud af hvad der er galt..

<?php
$dir = "../deadlines";

if (is_dir($dir))
{
    if ($dh = opendir($dir))
    {
        $files = array();
        while (($file = readdir($dh)) !== false)
        {
            if($file != "." && $file != "..")
            {
                    $files[] = $file;
            }
        }

        sort(&$files);
        foreach($files as $file)
        {
            echo "<a href=\"$dir/$file\">$file</a><br /><br />\n";
        }

        closedir($dh);
    }
    else
    {
    echo "kunne ikke åbne mappe (" . $dir . ")";
    }
}
else
{
    echo "kunne ikke finde mappen (" . $dir . ")";
}
?>
Avatar billede mrbs Nybegynder
06. januar 2006 - 15:18 #6
Det var godtnok mystisk... Det virker besynderligt nok fint nu! Det undrer mig! Takker

Har du så evt. en ide til hvordan man fjerner "efternavnet" .php .gif .jpg osv?

Mads
Avatar billede mr-kill Nybegynder
06. januar 2006 - 15:29 #7
Jeg ved ikke om der er en lettere måde, men ellers virker dette fint:

<?php
$dir = "../deadlines";

if (is_dir($dir))
{
    if ($dh = opendir($dir))
    {
        $files = array();
        while (($file = readdir($dh)) !== false)
        {
            if($file != "." && $file != "..")
            {
                    $files[] = $file;
            }
        }

        sort(&$files);
        foreach($files as $file)
        {
            $filename = explode(".", $file);
            echo "<a href=\"$dir/$file\">$filename[0]</a><br /><br />\n";
        }

        closedir($dh);
    }
    else
    {
    echo "kunne ikke åbne mappe (" . $dir . ")";
    }
}
else
{
    echo "kunne ikke finde mappen (" . $dir . ")";
}
?>
Avatar billede mr-kill Nybegynder
06. januar 2006 - 15:30 #8
Det skal lige siges, at det ikke virker hvis filnavnet indeholder "."
Avatar billede mr-kill Nybegynder
06. januar 2006 - 16:43 #9
Jeg har lavet dette som kan fjerne endelsen af filen. Det virker også hvis filnavnet indeholder "." men jeg ved ikke om der findes en smartere måde at gøre det på.

        foreach($files as $file)
        {
            $filename = explode(".", $file);
            if(sizeof($filename) > 2)
            {
                for($i = 0; $i < sizeof($filename)-1; $i++)
                {
                    $name .= ($i == sizeof($filename)-2) ? $filename[$i] : $filename[$i] . ".";
                }
                echo "<a href=\"$dir/$file\">$name</a><br /><br />\n";
            }
            else
            {
                echo "<a href=\"$dir/$file\">$filename[0]</a><br /><br />\n";
            }
        }
Avatar billede hmortensen Nybegynder
06. januar 2006 - 17:25 #10
En anden mulighed:

$files = glob("images/*.*");

sort($files);

foreach ($files as $file)
{
    $shortName = substr($file, strrpos($file, "/")+1, strrpos($file, ".")-strlen($file));

    echo '<a href="'.$file.'">'.$shortName.'</a><br>';
}
Avatar billede mrbs Nybegynder
08. januar 2006 - 19:53 #11
Har lige været på weekend - det virker fint!

mr-kill>> læg et svar, så får du lige en slat point fra mig ;)
Avatar billede mr-kill Nybegynder
08. januar 2006 - 20:59 #12
svar :)
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