фильтр scandir и сортировать по дате

  1. Мне нужно получить файлы в каталоге в массиве.
    • Только файлы, которые заканчиваются на .markdown
  2. Файлы должны быть отсортированы по дате

Эффективность – это не огромная сделка, но мне всегда нравится делать вещи максимально эффективными. Будет несколько каталогов, в каждой из которых будет до сотни файлов.

Я знаю, что я использую функцию scandir чтобы получить файлы в массив, но я не уверен, куда идти оттуда. Я мог бы бросить его в цикле, чтобы проверить, заканчиваются ли файлы .markdown , но есть ли какое-то регулярное выражение, которое я мог бы передать в сканирование?

благодаря

Вы можете использовать glob() для получения массива имен файлов, а затем использовать usort() и filectime() чтобы упорядочить их по датам создания:

 $files = glob('*.markdown'); usort($files, function($file_1, $file_2) { $file_1 = filectime($file_1); $file_2 = filectime($file_2); if($file_1 == $file_2) { return 0; } return $file_1 < $file_2 ? 1 : -1; }); 

Для версий PHP ниже 5,3:

 function sortByCreationTime($file_1, $file_2) { $file_1 = filectime($file_1); $file_2 = filectime($file_2); if($file_1 == $file_2) { return 0; } return $file_1 < $file_2 ? 1 : -1; } $files = glob('*.markdown'); usort($files, 'sortByCreationTime'); 

Самый простой способ получить список файлов – просто сделать

 $files = glob('*.markdown'); 

glob () в основном делает то же самое подстановочное соответствие, которое встречается в командной строке.

Сортировка по дате потребует, чтобы вы просмотрели каждый из этих файлов с помощью stat() и извлекли его значения mtime / ctime / atime (какие fileatime (), filemtime (), filectime () возвращаются напрямую, но все равно используют stat () внутри) ,