@fomenko_alexandr

Как сделать вывод всех файлов в папках и подпапках + сортировка по размеру?

Привет мастера. Была задача - найти все файлы с папки, и со всех вложенных, и отсортировать их по размеру. С задачей справился, но изобретал велосипед.
Почему мне не нравится данное решение, это потому, что изначально хотел сделать, чтобы возвращало массив данных: вида array([path/to/dir] => 'size', [path/to/dir2] => 'size')
Но не получилось так сделать, полчал рекурсивно (рекурсивно), и удавалось получать только 2,3-мерный массив. В итоге потредовалася ещё одна функция вытаскивания данных с такого массива и формирование нового.
Сделал, с помощью добавления разделителей в конец названия и размера.
Вот так было реализовано:
//получение всех файлов
function getFiles($dir) {

    $files = null;

    if ($handle = opendir($dir)) {

        while (false !== ($entry = readdir($handle))) {

            if($entry == '.' || $entry == '..')
                continue;

            if(is_dir($dir.'/'.$entry))
                $files .= getFiles($dir.'/'.$entry);
            else {
                $files .= $dir.'/'.$entry.'|::|'.filesize($dir.'/'.$entry).'|->|';
            }
        }

        closedir($handle);
    } else
        return false;

    return $files;

}


//получение названий файлов
function getDataFiles(&$filesArray) {
    $fileArray = null;

    foreach ($filesArray as &$item) {
        if(empty($item))
            continue;

        $fileInfo = explode('|::|', $item);
        $fileArray[$fileInfo[0]] = $fileInfo[1];

    }

    return $fileArray;

}

//И потом просто вывожу так:
 $dir = 'content/video';
$files = getFiles($dir);
$files = explode('|->|', $files);
$files = getDataFiles($files);

//по убыванию
arsort($files);


Вопрос уже решен, мне просто интересно, как этот код можно сделать аккуратно.
  • Вопрос задан
  • 286 просмотров
Пригласить эксперта
Ответы на вопрос 1
0lorin
@0lorin
программист
В SPL есть классы для работы с этим делом — код получается красивее.
По теме я не знаю. Но когда-то решал задачу сбора статистики по проекту — считал количество файлов по типам, количество строк в файлах и там ещё чё-то. Вот тут лежит, если не лень разбираться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Etton Казань
от 100 000 ₽
Смокинг Казань
от 120 000 до 150 000 ₽
Plesk Новосибирск
от 150 000 до 300 000 ₽
17 сент. 2021, в 01:51
220000 руб./за проект
17 сент. 2021, в 01:46
10000 руб./за проект
10 сент. 2021, в 14:58
200 руб./в час