Đây là phiên bản sửa đổi của câu trả lời Hors, hoạt động tốt hơn một chút đối với trường hợp của tôi, vì nó loại bỏ thư mục cơ sở được truyền khi đi và có một công tắc đệ quy có thể được đặt thành false, điều này cũng rất tiện lợi. Ngoài ra, để làm cho đầu ra dễ đọc hơn, tôi đã tách tệp và tệp thư mục con, vì vậy tệp được thêm vào trước rồi mới đến tệp thư mục con (xem kết quả để biết ý tôi là gì.)
Tôi đã thử một số phương pháp và đề xuất khác xung quanh và đây là những gì tôi đã kết thúc. Tôi có một phương pháp làm việc đã thấy là rất giống nhau, nhưng dường như thất bại nơi có một thư mục con không có file nhưng thư mục con mà đã có một subsubdirectory với tác phẩm, nó không quét subsubdirectory cho các tập tin - vì vậy một số câu trả lời có thể cần phải được kiểm tra cho trường hợp đó.) ... dù sao thì tôi cũng muốn đăng phiên bản của mình ở đây để phòng trường hợp ai đó đang tìm kiếm ...
function get_filelist_as_array($dir, $recursive = true, $basedir = '', $include_dirs = false) {
if ($dir == '') {return array();} else {$results = array(); $subresults = array();}
if (!is_dir($dir)) {$dir = dirname($dir);}
if ($basedir == '') {$basedir = realpath($dir).DIRECTORY_SEPARATOR;}
$files = scandir($dir);
foreach ($files as $key => $value){
if ( ($value != '.') && ($value != '..') ) {
$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
if (is_dir($path)) {
if ($include_dirs) {$subresults[] = str_replace($basedir, '', $path);}
if ($recursive) {
$subdirresults = get_filelist_as_array($path, $recursive, $basedir, $include_dirs);
$results = array_merge($results, $subdirresults);
}
} else {
$subresults[] = str_replace($basedir, '', $path);
}
}
}
if (count($subresults) > 0) {$results = array_merge($subresults, $results);}
return $results;
}
Tôi cho rằng một điều cần cẩn thận là không chuyển giá trị $ basedir cho hàm này khi gọi nó ... chủ yếu chỉ cần truyền $ dir (hoặc truyền một đường dẫn tệp cũng sẽ hoạt động ngay bây giờ) và tùy chọn $ đệ quy là false nếu và như cần thiết. Kết quả:
[0] => demo-image.png
[1] => filelist.php
[2] => tile.png
[3] => 2015\header.png
[4] => 2015\08\background.jpg
Thưởng thức! Được rồi, quay lại chương trình tôi đang thực sự sử dụng cái này trong ...
CẬP NHẬT Đã thêm đối số bổ sung để bao gồm các thư mục trong danh sách tệp hay không (ghi nhớ các đối số khác sẽ cần được chuyển để sử dụng điều này.) Ví dụ.
$results = get_filelist_as_array($dir, true, '', true);
RecursiveDirectoryIterator