Là một người yêu CodeIgniter, tôi có trong thực tế biến đổi cốt lõi directory_helper từ đó để bao gồm khả năng có một số tệp nhất định được miễn khỏi quá trình quét ngoài việc đặt độ sâu và chọn có bao gồm các tệp ẩn hay không.
Tất cả tín dụng được chuyển đến tác giả gốc của CI. Tôi chỉ cần thêm vào nó với mảng được miễn và xây dựng trong sắp xếp.
Nó sử dụng ksort để đặt hàng các thư mục, vì tên thư mục được đặt làm khóa và đặt tên tệp để sắp xếp các tệp trong mỗi thư mục.
Điều duy nhất bạn có thể cần làm là xác định DIRECTORY_SEPARATOR là gì cho môi trường của bạn nhưng tôi không nghĩ bạn sẽ cần sửa đổi nhiều thứ khác.
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;
}
dụ Cách sử dụng sẽ là:
$filelist = directory_map('full_server_path');
Như đã đề cập ở trên, nó sẽ thiết lập tên thư mục như là chìa khóa cho mảng con, vì vậy bạn có thể mong đợi một cái gì đó dọc theo dòng trong các cách sau:
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'
);
Chỉ cần nhớ rằng việc miễn trừ sẽ được áp dụng cho tất cả các thư mục. Điều này rất tiện lợi nếu bạn muốn bỏ qua tệp index.html hoặc tệp khác được sử dụng trong các thư mục bạn không muốn đưa vào.
trước tiên lưu chúng trong hai mảng và sau đó in chúng (thư mục đầu tiên và sau đó tệp) :) –
Bạn có nghĩa là tôi phải thực hiện hai "foreach"? Một cho thư mục và sau đó cho các tập tin? – Ogy