Comment puis-je lister les 5 premiers fichiers ou répertoires dans le répertoire triés par ordre alphabétique avec PHP?Comment puis-je trouver les 5 premiers fichiers dans un répertoire avec PHP?
Répondre
En utilisant scandir()
:
array_slice(array_filter(scandir('/path/to/dir/'), 'is_file'), 0, 5);
Le array_filter()
ainsi que le rappel de la fonction is_file()
fait que nous traitons simplement des fichiers sans avoir à écrire une boucle, nous n'avons même pas à nous soucier de .
et ..
car ce sont des répertoires.
Ou en utilisant glob()
-il ne correspond pas à des noms comme .htaccess
:
array_slice(glob('/path/to/dir/*.*'), 0, 5);
Ou en utilisant glob()
+ array_filter()
-celui-ci correspondra les noms de fichiers comme .htaccess
:
array_slice(array_filter(glob('/path/to/dir/*'), 'is_file'), 0, 5);
Si vous pensez faible niveau (rangé par numéro d'inode), alors readdir est la fonction pour vous.
Sinon, si vous voulez les alphabétiques, alors scandir pourrait être une meilleure option. Comme dans:
$firstfive = array_slice(scandir("."), 2, 5);
Notez que les deux premières entrées sont renvoyées par scandir
« » et "..".
Il est probablement plus simple d'utiliser scandir
, sauf si vous voulez faire quelque chose d'un peu plus complexe. scandir
renvoie les répertoires aussi bien, donc nous allons filtrer les fichiers permettent seulement:
$items = scandir('/path/to/dir');
$files = array();
for($i = 0, $i < 5 && $i < count($items); $i++) {
$fn = '/path/to/dir/' . $items[$i];
if(is_file($fn)) {
$files[] = $fn;
}
}
'$ i <5' devrait être remplacé par' count ($ files) <5' – Veger
Devrait-il? '$ i <5' et' count ($ files) <5' sont à peu près les mêmes, même si '$ i <5' serait marginalement plus rapide car il n'appelle pas une fonction –
$ i est aussi 5 quand 5 répertoires sont trouvés ... Et l'OP veut des fichiers – Veger
avez-vous besoin d'être * les 5 premiers lorsqu'ils sont triés en fonction de *, ou seulement des 5 fichiers? –
Wim
Personne qui crée une belle réponse 'glob', en utilisant un motif pour filtrer les répertoires? – Veger
@Veger: Juste fait. : P –