Привет мастера. Была задача - найти все файлы с папки, и со всех вложенных, и отсортировать их по размеру. С задачей справился, но изобретал велосипед.
Почему мне не нравится данное решение, это потому, что изначально хотел сделать, чтобы возвращало массив данных: вида 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);
Вопрос уже решен, мне просто интересно, как этот код можно сделать аккуратно.