web-dev-qa-db-fra.com

scandir () pour trier par date modifiée

J'essaie de faire en sorte que la fonction scandir(); dépasse ses limites écrites. J'ai besoin de plus que le tri alpha actuellement pris en charge. Je dois trier les résultats de scandir(); pour être triés par date de modification. 

J'ai essayé quelques solutions trouvées ici et d'autres solutions de sites Web différents, mais aucune ne fonctionnait pour moi. Je pense donc qu'il est raisonnable que je poste ici.

Ce que j'ai essayé jusqu'ici est ceci:

function scan_dir($dir)
{
    $files_array = scandir($dir);
    $img_array   = array();
    $img_dsort   = array();
    $final_array = array();

    foreach($files_array as $file)
    {
        if(($file != ".") && ($file != "..") && ($file != ".svn") && ($file != ".htaccess"))
        {
            $img_array[] = $file;
            $img_dsort[] = filemtime($dir . '/' . $file);   
        }
    }

    $merge_arrays = array_combine($img_dsort, $img_array);
    krsort($merge_arrays);

    foreach($merge_arrays as $key => $value)
    {
        $final_array[] = $value;    
    }

    return (is_array($final_array)) ? $final_array : false;
}

Mais, cela ne semble pas fonctionner pour moi, il ne renvoie que 3 résultats, mais il devrait renvoyer 16 résultats, car le dossier contient 16 images.

15
Dugi
function scan_dir($dir) {
    $ignored = array('.', '..', '.svn', '.htaccess');

    $files = array();    
    foreach (scandir($dir) as $file) {
        if (in_array($file, $ignored)) continue;
        $files[$file] = filemtime($dir . '/' . $file);
    }

    arsort($files);
    $files = array_keys($files);

    return ($files) ? $files : false;
}
79
Ryon Sherman

Je pense que le problème dans votre code d'origine est que plusieurs fichiers peuvent avoir la même date/heure de modification. Ainsi, lors de la combinaison des tableaux, plusieurs entrées de fichier ayant la même date/heure de modification seront écrasées et vous ne recevrez qu'une seule entrée dans le tableau final pour cet horodatage .

0
bpatel

Exemple alternatif ..

$dir = "/home/novayear/public_html/backups";
chdir($dir);
array_multisort(array_map('filemtime', ($files = glob("*.{sql,php,7z}", GLOB_BRACE))), SORT_DESC, $files);
foreach($files as $filename)
{
  echo "<a>".substr($filename, 0, -4)."</a><br>"; 
}  
0
NovaYear