PHP: ordinare i file in una directory

In questo articolo vedremo come ordinare i file in una directory con PHP.

La soluzione è la seguente:


function sort_files_in_dir($dir, $sort = 'asc') {
    if(!is_dir($dir)) {
        return false;
    }
    $dir = scandir($dir);
    $files = array_map(array_diff($dir, ['.', '..']), function($file) {
        return $dir . '/' . $file;
    });
    usort($files, function($a, $b) use ($sort) {
        if($sort == 'asc') {
            return filemtime($a) > filemtime($b);
        } else {
            return filemtime($a) < filemtime($b);
        }
    });
    return $files;

}

La funzione effettua questi passaggi su una directory:

  1. Controlla se la directory specificata ($dir) esiste utilizzando la funzione is_dir(). Se la directory non esiste, la funzione restituisce false e termina l'esecuzione.

  2. Utilizza la funzione scandir() per ottenere un elenco dei file nella directory specificata. L'array restituito contiene anche i riferimenti ai directory "." e "..".

  3. Utilizza la funzione array_diff() in combinazione con array_map() per rimuovere i riferimenti alle directory correnti e precedenti ("." e "..") dall'elenco dei file. L'array risultante è memorizzato nella variabile $files.

  4. Utilizza la funzione usort() per ordinare l'array $files. usort() richiede due argomenti: l'array da ordinare e una funzione di confronto personalizzata. Nel caso della funzione sort_files_in_dir, la funzione di confronto personalizzata viene definita come una funzione anonima (lambda function) utilizzando la parola chiave function($a, $b).

  5. La funzione di confronto prende due file ($a e $b) e confronta le loro date di modifica utilizzando la funzione filemtime(). Se il parametro $sort è impostato su 'asc' (valore predefinito), la funzione restituirà true se la data di modifica di $a è maggiore di quella di $b, altrimenti restituirà false. Questo ordina gli elementi in modo crescente.

  6. Se il parametro $sort è diverso da 'asc', la funzione inverte l'operazione di confronto, restituendo true se la data di modifica di $a è minore di quella di $b, altrimenti restituisce false. Questo ordina gli elementi in modo decrescente.

  7. Restituisce infine l'array di file ordinato.

Torna su