首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件夹结构中的文件列表创建数组- PHP

从文件夹结构中的文件列表创建数组- PHP
EN

Stack Overflow用户
提问于 2015-11-11 13:33:35
回答 1查看 932关注 0票数 1

我一直在尝试对一大堆文件夹进行排序,但一直无法让多层按我想要的方式工作。

我有一大堆分散在多级目录结构中的MP4文件,我需要获取一个包含MP4文件的文件夹列表的数组。

例如,下面是文件夹和文件的列表。

代码语言:javascript
复制
/videos/
/videos/2015-11-09/
/videos/2015-11-09/device-1/
/videos/2015-11-09/device-1/110519/
/videos/2015-11-09/device-1/110519/Video-001.MP4
/videos/2015-11-09/device-1/110519/Video-002.MP4
/videos/2015-11-09/device-1/134852/Video-003.MP4
/videos/2015-11-09/device-2/
/videos/2015-11-09/device-2/094516/
/videos/2015-11-09/device-2/094516/Video-001.MP4
/videos/2015-11-09/device-2/094516/Video-002.MP4
/videos/2015-11-10/
/videos/2015-11-10/device-1/
/videos/2015-11-10/device-1/214537/Video-004.MP4
/videos/2015-11-10/device-1/214537/Video-005.MP4
/videos/2015-11-10/device-4/
/videos/2015-11-10/device-4/Video02-001.MP4
/videos/2015-11-10/device-4/Video02-002.MP4
/videos/2015-11-10/Video01-001.MP4
/videos/2015-11-10/Video01-002.MP4
/videos/2015-11-10/Video01-003.MP4

我想要一个php函数使用scandir()来查看它们。

我已经构建了几个函数来删除隐藏文件,以及从结果中删除除.MP4之外的所有内容。

代码语言:javascript
复制
$HiddenFileFilter = function($a) {
    return $a[0] != ".";
};

$FileFilter = function($a) {
    if (strpos($a,'.MP4') !== false) {
        return $a;
    }
};

$ScandirFilteredResults = array_filter(scandir($Dir), $FileFilter);

我希望得到的结果是其中包含.MP4文件的目录,以及包含filemtime()的MP4文件,这对每个文件夹都很好。

代码语言:javascript
复制
Array (
    [/videos/2015-11-09/device-1/110519/] => Array (
        [filemtime] => FILE_M_TIME
        [MP4] => Array (
            [0] => Video-001.MP4
            [1] => Video-002.MP4
        )
    )
    [/videos/2015-11-09/device-1/134852/] => Array (
        [filemtime] => FILE_M_TIME
        [MP4] => Array (
            [0] => Video01-003.MP4
        )
    )
    [/videos/2015-11-09/device-2/094516/] => Array (
        [filemtime] => FILE_M_TIME
        [MP4] => Array (
            [0] => Video-001.MP4
            [1] => Video-002.MP4
        )
    )
    [/videos/2015-11-10/device-1/214537/] => Array (
        [filemtime] => FILE_M_TIME
        [MP4] => Array (
            [0] => Video01-004.MP4
            [1] => Video01-005.MP4
        )
    )
    [/videos/2015-11-10/device-4/] => Array (
        [filemtime] => FILE_M_TIME
        [MP4] => Array (
            [0] => Video02-001.MP4
            [1] => Video02-002.MP4
        )
    )
    [/videos/2015-11-09/] => Array (
        [filemtime] => FILE_M_TIME
        [MP4] => Array (
            [0] => Video01-001.MP4
            [1] => Video01-002.MP4
            [2] => Video01-003.MP4
        )
    )
)

我只希望包含.MP4文件的文件夹和其中的MP4文件一起出现在输出数组中。

可能有6级以下的目录需要列出。所以/videos/中的任何内容。

我已经能够建立一个函数来做到这一点,在第三个文件夹下的所有视频,但我不知道如何做在多个级别的文件夹。

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 15:06:17

您需要一个递归函数来递归地扫描目录。

尝试以下代码。代码会在需要的地方进行注释。

代码语言:javascript
复制
$all_mp4_files = ScandirRecursive($Dir);
print_r($all_mp4_files);


function ScandirRecursive($Dir){
    $file_list = array();
    $ScandirFilteredResults = scandir($Dir);
    foreach ($ScandirFilteredResults as $file){
        if ($file[0] !='.'){
            $full_file_name = $Dir . '/' .$file;
            if (is_dir($full_file_name)){ // if this is a directory scan the files inside it.
                // merge the sub directory with current
                $file_list = array_merge($file_list, ScandirRecursive($full_file_name));
            }else{
                if (strtoupper(pathinfo($full_file_name, PATHINFO_EXTENSION)) == 'MP4'){
                    //Build your array
                    $file_list[dirname($full_file_name)]['filemtime'][] = filemtime($full_file_name);
                    $file_list[dirname($full_file_name)]['MP4'][] = basename($full_file_name);
                }
            }
        }
    }
    return $file_list;
}

注意:代码没有经过测试,只是一个构建指南。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33644811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档