После использования $files = new DirectoryIterator() в PHP, как вы сортируете элементы?

Мы можем получить файлы в каталоге на PHP

$files = new DirectoryIterator() 

после этого есть ли простой способ сортировки элементов в определенном порядке их отображения? Благодарю.

2 ответа

Решение

Не похоже, что есть способ сортировки данных внутри итератора.

Вы можете поместить отображаемые данные в промежуточный массив с ключом значения, по которому вы хотите отсортировать, и вызвать ksort() для массива. Однако это займет два прохода по данным.

$path = ".";
$files = new DirectoryIterator($path);
$files_array = array();

while($files->valid()) {
        // sort key, ie. modified timestamp
        $key = $files->getMTime();
        $data = $files->getFilename();
        $files_array[$key] = $data;
        $files->next();
}
ksort($files_array);
foreach($files_array as $key => $file){
    print $key . " => " . $file . "\n";
}

редактировать:

если вы поместите всю информацию, которую вы хотите вывести для файлов, в значения массива, вы можете просто потом развернуть () массив, вместо того, чтобы повторять циклически повторяющиеся данные.

$files = new DirectoryIterator($path);
$i = 0;
$paths = array();
while($files->valid()) {
    $paths[$i++] = $files->getFileName();
    $files->next();
}
sort($paths)

Может быть то, что вы ищете, вы всегда можете применить функцию сортировки для сортировки путей в зависимости от ваших предпочтений после этого.

Другие вопросы по тегам