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:
Controlla se la directory specificata (
$dir) esiste utilizzando la funzioneis_dir(). Se la directory non esiste, la funzione restituiscefalsee termina l'esecuzione.Utilizza la funzione
scandir()per ottenere un elenco dei file nella directory specificata. L'array restituito contiene anche i riferimenti ai directory "." e "..".Utilizza la funzione
array_diff()in combinazione conarray_map()per rimuovere i riferimenti alle directory correnti e precedenti ("." e "..") dall'elenco dei file. L'array risultante è memorizzato nella variabile$files.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 funzionesort_files_in_dir, la funzione di confronto personalizzata viene definita come una funzione anonima (lambda function) utilizzando la parola chiavefunction($a, $b).La funzione di confronto prende due file (
$ae$b) e confronta le loro date di modifica utilizzando la funzionefilemtime(). Se il parametro$sortè impostato su 'asc' (valore predefinito), la funzione restituiràtruese la data di modifica di$aè maggiore di quella di$b, altrimenti restituiràfalse. Questo ordina gli elementi in modo crescente.Se il parametro
$sortè diverso da 'asc', la funzione inverte l'operazione di confronto, restituendotruese la data di modifica di$aè minore di quella di$b, altrimenti restituiscefalse. Questo ordina gli elementi in modo decrescente.Restituisce infine l'array di file ordinato.