1. php 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组。
/** * 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组 * @param string $dir * @return array * @author www.phpernote.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.phpernote.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 ) )