查找目录/子目录中的所有文件并将它们分组到一个数组中?

时间:2014-07-21 19:40:50

标签: php arrays

我正在编写一个脚本,该脚本将带有图像的项目列表进行匹配,该脚本存储在该主文件夹的文件夹和子文件夹中。我想获取主/子文件夹中的所有文件并将它们放在一个数组中。

我有一个函数可以查找所有文件,但不会将它们混合在一个数组中(因此我可以轻松地将项目与图像匹配 - 如果它是多维的则更难)。

function listFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ol>';
    $images = [];
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</li>';
            $images[] = $ff;
        }
    }
    echo "<pre>";
    print_r($images);
    echo '</ol>';
}

listFolderFiles("K:\\");

关于如何平整结果阵列的任何想法?

2 个答案:

答案 0 :(得分:0)

要返回数组而不是打印HTML,您显然会删除echo命令。

首先,在函数的开头定义数组,例如$ return = array();

现在,您使用$ return [] = $ ff;

而不是回显$ ff

然后,您不想只是进行递归调用,而是希望使用array_merge将新数组合并到当前数组中($ return,listFolderFiles($ dir。'/'。$ ff));

最后,最后返回:return $ return;

答案 1 :(得分:0)

只需合并它们:

function listFolderFiles($dir) {
    $files = glob("$dir/*");
    foreach($files as $f) {
        if(is_dir($f)) {
            $files = array_merge($files, (array)listFolderFiles($f));
        }
    }
    return $files;
}

foreach(listFolderFiles('/path') as $file) {
    echo "<li>$file</li>";
}

编辑。很多方法,但是当你调用这个函数时可能会这样做。