php DirectoryIterator сортирует файлы по дате

Я использую класс PHP DirectoryIterator для отображения файлов в каталоге. Однако я не могу найти простой способ сортировки файлов по дате. Как это делается с DirectoryIterator

 <?php $dir = new DirectoryIterator('.'); foreach ($dir as $fileinfo) { echo $fileinfo->getFilename() . '<br>'; } ?> 

Что делать, если я называю мои файлы как any_2342345345.ext, где числа представляют время в миллисекундах, поэтому каждый файл имеет уникальный номер. Как мы можем сортировать, глядя на цифры после подчеркивания

Solutions Collecting From Web of "php DirectoryIterator сортирует файлы по дате"

Если вам нужно отсортировать, построить массив и отсортировать его.

 $files = array(); $dir = new DirectoryIterator('.'); foreach ($dir as $fileinfo) { $files[$fileinfo->getMTime()][] = $fileinfo->getFilename(); } ksort($files); 

Это приведет к созданию массива с измененным временем в качестве ключа и массивом имен файлов в качестве значения. Затем он сортируется через ksort() , который даст вам имена файлов в порядке изменения времени.

Если вы хотите повторно разложить структуру на стандартный массив, вы можете использовать …

 $files = call_user_func_array('array_merge', $files); 

Если несколько файлов имеют одинаковое модифицированное время (обновлено):

 $files = array(); $mtimes = array(); $dir = new DirectoryIterator('.'); foreach($dir as $file){ if(!$file->isFile()) continue; $mtime = $file->getMTime(); if(!$mtimes[$mtime]){ $files[$mtime.'.0'] = $file->getFilename(); $mtimes[$mtime] = 1; }else{ $files[$mtime.'.'.$mtimes[$mtime]++] = $file->getFilename(); } } ksort($files); 

Если вы все еще хотите получить доступ ко всем данным, доступным в DirectoryIterator (например, isDot() getSize() т. Д.), Возможно, это сохранить ключ Iterator в массиве, который вы собираетесь сортировать, и позже обратиться к DirectoryIterator .

 $sorted_keys = array(); $dir_iterator = new DirectoryIterator('.'); foreach ( $dir_iterator as $fileinfo ) { $sorted_keys[$fileinfo->getMTime()] = $fileinfo->key(); } ksort($sorted_keys); /* Iterate `DirectoryIterator` as a sorted array */ foreach ( $sorted_keys as $key ) { $dir_iterator->seek($key); $fileinfo = $dir_iterator->current(); /* Use $fileinfo here as a normal DirectoryIterator */ echo $fileinfo->getFilename() . ' ' . $fileinfo->getSize() . '<br>'; }