PHP遍历目录函数,出问题了,期待高手解释
functionview_dir($directory,$i)//返回路径下的文件名,遍历子目录名.加路径{$handle=opendir($directory);//打...
function view_dir($directory,$i) //返回路径下的文件名,遍历子目录名.加路径
{
$handle = opendir( $directory ); //打开目录
while ( $file = readdir($handle) ) //如果READDIR函数读到文件或目录则执行while
{
$bdir = $directory . '/' .$file; //定义目录下的文件名
if ($file <> '.' && $file <> '..' && is_dir($bdir)) //如果不是.和 ..并且$bdir是个目录
{
view_dir( $directory .'/'. $file,$i); //再次调用view_dir方法
}
else if( $file <> '.' && $file <> '..') //否则输出文件名并换行
{
$file_name[$i]=$directory .'/'. $file;
echo $directory .'/'. $file." ".$i."<br>";
$i++;
}
}
closedir( $handle ); //关闭目录
return $file_name;
}
函数目的是把 文件名返回到数组
不想用全局变量,因此在函数自己调用函数自己时,多传了个变量$i
第一次调用函数时$i=0 后面递增,可是结果$i值有重复,(有子目录时)
如何改,谢谢 展开
{
$handle = opendir( $directory ); //打开目录
while ( $file = readdir($handle) ) //如果READDIR函数读到文件或目录则执行while
{
$bdir = $directory . '/' .$file; //定义目录下的文件名
if ($file <> '.' && $file <> '..' && is_dir($bdir)) //如果不是.和 ..并且$bdir是个目录
{
view_dir( $directory .'/'. $file,$i); //再次调用view_dir方法
}
else if( $file <> '.' && $file <> '..') //否则输出文件名并换行
{
$file_name[$i]=$directory .'/'. $file;
echo $directory .'/'. $file." ".$i."<br>";
$i++;
}
}
closedir( $handle ); //关闭目录
return $file_name;
}
函数目的是把 文件名返回到数组
不想用全局变量,因此在函数自己调用函数自己时,多传了个变量$i
第一次调用函数时$i=0 后面递增,可是结果$i值有重复,(有子目录时)
如何改,谢谢 展开
1个回答
展开全部
因为你是递归函数,所以当第一次执行该函数时数组$file_name就已经被赋值,再递归调用该函数,相当于重新又调用了一个函数,原函数产生的数组$file_name不会再改变,所以该函数运行结果永远都是第一层目录下面的文件。
所以对递归函数如果要统计结果就应该用传引用的方法。
解决方法:
function view_dir($directory,&$file_name=array()) //返回路径下的文件名,遍历子目录名.加路径
{
$handle = opendir( $directory ); //打开目录
while ( $file = readdir($handle) ) //如果READDIR函数读到文件或目录则执行while
{
$bdir = $directory . '/' .$file; //定义目录下的文件名
if ($file <> '.' && $file <> '..' && is_dir($bdir)) //如果不是.和 ..并且$bdir是个目录
{
view_dir( $directory .'/'. $file,$file_name); //再次调用view_dir方法
}
else if( $file <> '.' && $file <> '..') //否则输出文件名并换行
{
array_push($file_name,$directory .'/'. $file);
//print_r($file_name);
//echo $directory .'/'. $file." ".$i."<br>";
}
}
closedir( $handle ); //关闭目录
return $file_name;
}
以上代码没太大变化,我加了一个参数,是把每层目录生成的数组以引用的形式传递。当然去掉了$i。
所以对递归函数如果要统计结果就应该用传引用的方法。
解决方法:
function view_dir($directory,&$file_name=array()) //返回路径下的文件名,遍历子目录名.加路径
{
$handle = opendir( $directory ); //打开目录
while ( $file = readdir($handle) ) //如果READDIR函数读到文件或目录则执行while
{
$bdir = $directory . '/' .$file; //定义目录下的文件名
if ($file <> '.' && $file <> '..' && is_dir($bdir)) //如果不是.和 ..并且$bdir是个目录
{
view_dir( $directory .'/'. $file,$file_name); //再次调用view_dir方法
}
else if( $file <> '.' && $file <> '..') //否则输出文件名并换行
{
array_push($file_name,$directory .'/'. $file);
//print_r($file_name);
//echo $directory .'/'. $file." ".$i."<br>";
}
}
closedir( $handle ); //关闭目录
return $file_name;
}
以上代码没太大变化,我加了一个参数,是把每层目录生成的数组以引用的形式传递。当然去掉了$i。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询