【问题标题】:Scan Directory and display subdirectory and its contents扫描目录并显示子目录及其内容
【发布时间】:2023-09-29 23:16:01
【问题描述】:

我有一个这样的目录结构

- images
-- images1/
--- image.jpg
-- images2/
--- image.jpg
-- images3/
--- image.jpg
-- images4/
--- image.jpg

假设目录中还有其他文件。

我想扫描每个目录,显示它以及每个目录中的特定内容,所以我想显示一个文件夹数组,只有 .jpg 和 .png 图像,而不是 .gif,因为例子。

我该怎么做?到目前为止我有..

public function getImages(){

    $path = app_path() . '/images/';
    $list = scandir($path);
    while ($list) {
        # stuck here...
    }
}

【问题讨论】:

    标签: php


    【解决方案1】:

    如果你想获取里面有子文件夹的文件,那么你可以使用RecursiveDirectoryIterator,然后将它与RecursiveIteratorIterator结合起来。 (我的天哪,这是什么名字)。考虑这个例子:

    $path = 'images';
    $current_folder = '';
    $images = array();
    $dir = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
    foreach($files as $key => $value) {
        if($value->isDir()) {
            $current_folder = $value->getFilename();
            $images[$current_folder] = array();
        } else {
            if($value->getExtension() == 'jpg' || $value->getExtension() == 'png') {
                $images[$current_folder][] = $value->getFilename();
            }
        }
    }
    
    ksort($images);
    print_r($images);
    

    样本输出:

    Array
    (
        [images1] => Array
        (
            [0] => image.jpg
        )
    
        [images2] => Array
        (
            [0] => image.jpg
        )
    
        [images3] => Array
        (
            [0] => image.jpg
        )
    
        [images4] => Array
        (
            [0] => image.jpg
        )
    
    )
    

    【讨论】:

    • 这里的两个括号有什么用..$images[$current_folder][]...只有$images[$current_folder]就够了??
    • @CodeLover 只是确保,如果一个文件夹中有 3 张图像,您不希望它们在每个循环中都覆盖该值。这就是为什么我将其分配并附加为数组
    • 如果我添加 .$images[$current_folder] 而不是 $images[$current_folder][] 会起作用吗??
    • @CodeLover 它仍然可以工作,但正如我所说,它只会存储一个值,如果该文件夹有很多图像怎么办?如果文件夹images1 中有image.jpg, image.png, monalisa.png 怎么办?如果你这样做,你只会得到一个。
    • 所以如果我们像 $images[$current_folder][] 这样调用它是调用多维数组的方式吗??