«

php循环获取目录以及所有子目录中的所有文件

时间:2024-2-20 10:08     作者:韩俊     分类: PHP


1. php 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组。

/**
 * 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组
 * @param string $dir
 * @return array
 * @author www.maopiaopiao.com
 */
function listDir($dir) {
    $files = [];

    if (!is_dir($dir)) {
        return $files;
    }

    foreach (scandir($dir) as &$file_name) {
        if ($file_name == '.' || $file_name == '..') {
            continue;
        }

        $file_abs_path = $dir . DIRECTORY_SEPARATOR . $file_name;

        $files[$file_name] = [
            'file_name' => $file_name,
            'abs_path' => $dir,//绝对地址
            'is_dir' => is_dir($file_abs_path) ? 1 : 0,
            'ext' => pathinfo($file_abs_path, PATHINFO_EXTENSION)
        ];

        $files[$file_name]['is_dir'] && $files[$file_name]['son'] = listDir($file_abs_path);
    }

    return $files;
}

返回结果示例:

Array
(
    [1] => Array
        (
            [file_name] => 1
            [abs_path] => /var/www/test
            [is_dir] => 1
            [son] => Array
                (
                    [2] => Array
                        (
                            [file_name] => 2
                            [abs_path] => /var/www/test/1
                            [is_dir] => 1
                            [son] => Array
                                (
                                    [3.log] => Array
                                        (
                                            [file_name] => 3.log
                                            [abs_path] => /var/www/test/1/2
                                            [is_dir] => 0
                                            [file_ext] => log
                                        )

                                )

                        )

                    [2.log] => Array
                        (
                            [file_name] => 2.log
                            [abs_path] => /var/www/test/1
                            [is_dir] => 0
                            [file_ext] => log
                        )

                )

        )

    [test.txt] => Array
        (
            [file_name] => test.txt
            [abs_path] => /var/www/test
            [is_dir] => 0
            [file_ext] => txt
        )

)

2. php 循环获取目录以及所有子目录中的所有文件,结果是一个二维数组。

/**
 * 循环获取目录以及所有子目录中的所有文件,结果是一个二维数组
 * @param string $dir
 * @return array
 * @author www.maopiaopiao.com
 */
function listDir($dir) {
    static $files = [];

    if (!is_dir($dir)) {
        return $files;
    }

    foreach (scandir($dir) as &$file_name) {
        if ($file_name == '.' || $file_name == '..') {
            continue;
        }

        $file_abs_path = $dir . $file_name;//绝对地址
        $is_dir = is_dir($file_abs_path);

        $files[$file_abs_path] = [
            'file_name' => $file_name,
            'abs_path' => $dir,
            'is_dir' => $is_dir ? 1 : 0,
            'ext' => $is_dir ? '' : pathinfo($file_abs_path, PATHINFO_EXTENSION)
        ];

        $is_dir && listDir($file_abs_path);
    }

    return $files;
}

返回结果示例:

Array
(
    [1] => Array
        (
            [file_name] => 1
            [abs_path] => /var/www/test
            [is_dir] => 1
        )

    [2] => Array
        (
            [file_name] => 2
            [abs_path] => /var/www/test/1
            [is_dir] => 1
        )

    [3.log] => Array
        (
            [file_name] => 3.log
            [abs_path] => /var/www/test/1/2
            [is_dir] => 0
            [file_ext] => log
        )

    [test.txt] => Array
        (
            [file_name] => test.txt
            [abs_path] => /var/www/test
            [is_dir] => 0
            [file_ext] => txt
        )

)

标签: php php教程

热门推荐