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
        )
)