//第一种:使用while
<?php
//PHP 遍历文件夹及其子目录
/*
* 遍历目录及其子目录
* @param1 string $path,要遍历的路径
* @param2 int $level = 0,默认的文件所在目录的层次(距离遍历的顶级目录的距离)
* @return array,包含了所有文件及其子文件的二维数组
*/
function myScandir($path,$level = 0){
//函数最终需要返回数组:先定义一个数组
static $files = array();
//从指定的文件夹内读取所有的文件
//打开文件夹资源
$o = opendir($path);
//读取数据:遍历
while($file = readdir($o)){
//遍历出所有的文件:一次只遍历一个
//数据保存:将文件保存到需要输出的数组中
//将当前遍历得到的文件存放与一个临时文件中
$temp['name'] = $file;
$temp['level'] = $level;
//判断数据内容是否是文件夹
//拼凑路径
$t_path = $path . '/' . $file;
if(is_dir($t_path)){
//是路径
$temp['is_dir'] = true;
$files[] = $temp;
//是文件夹:一定有子文件:与父问题一样
//排除.和..
if($file != '.' && $file != '..'){
//与父问题一样
myScandir($t_path,$level + 1);
}
}else{
//是文件
$temp['is_dir'] = false;
$files[] = $temp;
}
}
//返回数据
return $files;
}
//调用
$path = "../";
$files = myScandir($path);
<pre name="code" class="php">//第二种:使用scan_folder
$chen=0;
function iscan($dir,$chen){
//定义静态变量
static $arr=array();
//定义当前数组
$cur_arr=array();
//遍历目录
$all=scandir($dir);
//构造空格
$str=str_repeat(' ',$chen).'+';
//遍历文件数组
foreach($all as $k=>$v){
$f_dir=$dir.'/'.$v.'/';
$cur_arr[]=$v;
$cur_arr[]=$chen;
//判断是否目录或文件
if(is_dir($f_dir)){
$cur_arr[]=1;
echo "{$str}<span style='color:red'>{$v}</span><br/>";
if($v!='.' && $v!='..'){
//递归
iscan($f_dir,++$chen);
}
}else{
$cur_arr[]=0;
echo $v.'<br/>';
}
}
//添加到二维数组
$arr[]=$cur_arr;
return $arr;
//var_dump($all);
}
echo '<pre>';
var_dump(iscan('./',$chen));
!!超简短便于记忆版本:
function dir_all ( $path ) {
$handler = opendir($path);//打开目录
while (false!==($tmp = readdir($handler))) { //开始遍历目录
if(is_dir( "$path/$tmp" )) { //如果还是目录
if ($tmp=="." | $tmp=="..") continue; //特殊目录不管它
echo $tmp."<br>\n";//目录也要输出的
dir_all ("$path/$tmp");//递归当前目录
} else {
echo $tmp ."<br>\n";//如果是文件直接输出
}
}
}
php 简单实用 遍历文件夹代码
最新推荐文章于 2017-10-13 20:10:55 发布