65 votes

trier les fichiers par date en PHP

J'ai actuellement un index.php fichier qui me permet d'afficher la liste des fichiers dans le même répertoire, le résultat affiche les noms ensuite, j'ai utilisé filemtime() fonction pour afficher la date à laquelle le fichier a été modifié. mon problème est maintenant, comment vais-je trier la sortie pour afficher le dernier fichier modifié ?, J'ai pensé pendant un certain temps comment faire cela. si seulement je le fais avec mysql interaction il n'y aura pas de problème. veuillez me montrer un exemple de la façon de trier et de sortie de la liste de fichiers à partir de la dernière modification d'une seule. c'est ce que j'ai pour le moment

if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
          if(strlen($file)-strpos($file,".swf")== 4){
            echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
           }
       }
   }
   closedir($handle);
}

185voto

Gordon Points 156415

Cela permettrait de récupérer tous les fichiers dans le chemin/vers/les fichiers avec une .l'extension swf dans un tableau et ensuite trier ce tableau par le fichier de mtime

$files = glob('path/to/files/*.swf');
usort($files, function($a, $b) {
    return filemtime($a) < filemtime($b);
});

Le ci-dessus utilise une fonction Lambda et nécessite PHP 5.3. Avant 5.3, vous le feriez

usort($files, create_function('$a,$b', 'return filemtime($a)<filemtime($b);'));

Si vous ne voulez pas utiliser une fonction anonyme, vous pouvez tout aussi bien définir la fonction de rappel qu'une fonction régulière et passer le nom de la fonction à l' usort à la place.

Avec le tableau, vous pouvez alors parcourir les fichiers comme ceci:

foreach($files as $file){
    printf('<tr><td><input type="checkbox" name="box[]"></td>
            <td><a href="%1$s" target="_blank">%1$s</a></td>
            <td>%2$s</td></tr>', 
            $file, // or basename($file) for just the filename w\out path
            date('F d Y, H:i:s', filemtime($file)));
}

Notez que parce que vous avez déjà appelé filemtime lors du tri des fichiers, il n'y a pas de coût supplémentaire lors de l'appel de nouveau dans la boucle foreach en raison de la stat cache.

20voto

elias Points 906

Vous devez mettre les fichiers dans un tableau afin de trier et de trouver le dernier fichier modifié.

 
$files = array();
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
          $files[filemtime($file)] = $file;
       }
   }
   closedir($handle);

 

Non testé, mais c'est comment le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X