bycia kochanką CodeIgniter, mam w rzeczywistości zmodyfikowany rdzeń directory_helper z tego włączenie możliwości wyłączenia niektórych plików ze skanowania oprócz ustawienia głębokości i wyboru, czy powinny być włączone ukryte pliki.
Wszystkie zasługi należą się oryginalnym autorom CI. Po prostu dodałem do niego z wyłączoną tablicą i budowaniem w sortowaniu.
Wykorzystuje ksort zamówić foldery, jak nazwa folderu jest ustawiony jako klucz i natsort zamówić pliki w każdym folderze.
Jedyne, co musisz zrobić, to zdefiniować, czym jest DIRECTORY_SEPARATOR dla twojego środowiska, ale nie sądzę, że będziesz musiał zmodyfikować znacznie więcej.
function directory_map($source_dir, $directory_depth = 0, $hidden = FALSE, $exempt = array())
{
if ($fp = @opendir($source_dir))
{
$folddata = array();
$filedata = array();
$new_depth = $directory_depth - 1;
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
while (FALSE !== ($file = readdir($fp)))
{
// Remove '.', '..', and hidden files [optional]
if ($file === '.' OR $file === '..' OR ($hidden === FALSE && $file[0] === '.'))
{
continue;
}
is_dir($source_dir.$file) && $file .= DIRECTORY_SEPARATOR;
if (($directory_depth < 1 OR $new_depth > 0) && is_dir($source_dir.$file))
{
$folddata[$file] = directory_map($source_dir.$file, $new_depth, $hidden, $exempt);
}
elseif(empty($exempt) || !empty($exempt) && !in_array($file, $exempt))
{
$filedata[] = $file;
}
}
!empty($folddata) ? ksort($folddata) : false;
!empty($filedata) ? natsort($filedata) : false;
closedir($fp);
return array_merge($folddata, $filedata);
}
return FALSE;
}
Przykładem użycia może być:
$filelist = directory_map('full_server_path');
Jak wspomniano powyżej, będzie ustawić nazwę folderu jako kluczu tablicy dziecko, więc można się spodziewać czegoś na wzór następujący:
Array(
[documents/] => Array(
[0] => 'document_a.pdf',
[1] => 'document_b.pdf'
),
[images/] => Array(
[tn/] = Array(
[0] => 'picture_a.jpg',
[1] => 'picture_b.jpg'
),
[0] => 'picture_a.jpg',
[1] => 'picture_b.jpg'
),
[0] => 'file_a.jpg',
[1] => 'file_b.jpg'
);
Należy pamiętać, że zwolnienie zostanie zastosowane do wszystkich folderów. Jest to przydatne, jeśli chcesz pominąć plik index.html lub inny plik, który jest używany w katalogach, których nie chcesz uwzględnić.
najpierw zapisz je w dwóch tablicach, a następnie wydrukuj (najpierw folder, a potem pliki) :) –
Masz na myśli, że muszę zrobić dwa "foreach"? Jeden dla folderu, a potem dla plików? – Ogy