我一直在尝试对一大堆文件夹进行排序,但一直无法让多层按我想要的方式工作。
我有一大堆分散在多级目录结构中的MP4文件,我需要获取一个包含MP4文件的文件夹列表的数组。
例如,下面是文件夹和文件的列表。
/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之外的所有内容。
$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文件,这对每个文件夹都很好。
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/中的任何内容。
我已经能够建立一个函数来做到这一点,在第三个文件夹下的所有视频,但我不知道如何做在多个级别的文件夹。
发布于 2015-11-11 15:06:17
您需要一个递归函数来递归地扫描目录。
尝试以下代码。代码会在需要的地方进行注释。
$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;
}注意:代码没有经过测试,只是一个构建指南。
https://stackoverflow.com/questions/33644811
复制相似问题