Avatar billede drinkit Praktikant
21. maj 2011 - 14:21 Der er 9 kommentarer og
1 løsning

Script henter ting i forkert rækkefølge

Hej.
Hvordan får jeg mit script til at hente de filer jeg uploadede til mappen først, som de første,
og de nyeste uploads, som hentes sidst?

    <?php
    $path = "pictures";
    $dh = opendir($path);
    $i=1;
        while (($file = readdir($dh)) !== false) {
        if($file != "." && $file != ".." && $file != "index.php") {
        echo "<div class='panel'><img src='$path/$file' alt='' /></div>
    ";
        $i++;
        }
        }
    closedir($dh);
    ?>

Vh.
Mikael
Avatar billede coderdk Praktikant
21. maj 2011 - 16:15 #1
Gem filerne i et array, lav så en usort-funktion der bruger filemtime ;)
Avatar billede drinkit Praktikant
21. maj 2011 - 16:30 #2
Kan du vise mig hvordan man gør det?
Jeg er mere til HTML og CSS end jeg er til PHP..
Avatar billede coderdk Praktikant
21. maj 2011 - 16:36 #3
No time ;) Tilføj til array:

$array[] = $fil;

Læs http://dk.php.net/usort og http://dk.php.net/filemtime
Avatar billede drinkit Praktikant
21. maj 2011 - 23:54 #4
Har læst på det.. Men ang array- hvordan opsættes det?
Avatar billede coderdk Praktikant
22. maj 2011 - 01:04 #5
$path = "pictures";
$dh = opendir( $path );
$i=1;
$files = array();
while ( ( $file = readdir( $dh ) ) !== false )
{
    if( $file != "." && $file != ".." && $file != "index.php" )
    {
        $files[] = "$path/$file";
        $i++;
    }
}
closedir( $dh );

Så har du alle filer i $files - brug usort med filemtime til at sortere arrayet :)
Avatar billede drinkit Praktikant
22. maj 2011 - 12:51 #6
jeg er altså virkelig på bar bund her..
hvis du ikke har tid til at vise mig hvordan det laves, og forklare - så fint nok. men ville virkelig sætte pris på det.

vh.
Avatar billede drinkit Praktikant
22. maj 2011 - 13:03 #7
Fik klaret den..

Har vendt den om med "!="
Så den viser den ældste først.. Det virker bedre.
Hvis man ønsker nyeste først, ændre man blot "!=" til "==" på linje 19.

Tak coderdk - smid svar.

<?PHP

$directory="pictures/";
$sortOrder="newestFirst";

  $results = array();
  $handler = opendir($directory);
 
while ($file = readdir($handler)) {
      if ($file != '.' && $file != '..' && $file != "robots.txt" && $file != ".htaccess"){
          $currentModified = filectime($directory."/".$file);
          $file_names[] = $file;
          $file_dates[] = $currentModified;
      } 
  }
      closedir($handler);

  if ($sortOrder != "newestFirst"){
      arsort($file_dates);
  }else{
      asort($file_dates);
  }
 
  $file_names_Array = array_keys($file_dates);
  foreach ($file_names_Array as $idx => $name) $name=$file_names[$name];
  $file_dates = array_merge($file_dates);
 
  $i = 0;

  foreach ($file_dates as $$file_dates){
      $date = $file_dates;
      $j = $file_names_Array[$i];
      $file = $file_names[$j];
      $i++;
         
      echo  "<div class='panel'><img src='pictures/$file' alt='' /></div>";     
  }

?>
Avatar billede coderdk Praktikant
22. maj 2011 - 17:29 #8
Jeg ville bare havet:

function sortByFilemtime($a, $b)
{
  if ( filemtime( $a ) == filemtime( $b ) )
  {
      return 0;
  }
  return filemtime( $a ) > filemtime( $b ) ? 1 : -1;
}

$path = "pictures";
$dh = opendir( $path );
$i=1;
$files = array();
while ( ( $file = readdir( $dh ) ) !== false )
{
    if( $file != "." && $file != ".." && $file != "index.php" )
    {
        $files[] = "$path/$file";
        $i++;
    }
}
closedir( $dh );

usort( $files, "sortByFilemtime" );
Avatar billede drinkit Praktikant
22. maj 2011 - 18:05 #9
Ahh ja.. den var lidt mere overskuelig. Den bruger jeg istedet. Men begge virker. :)
God aften.. Smid svar så jeg kan lukke.
Avatar billede coderdk Praktikant
22. maj 2011 - 18:10 #10
Ok :)
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