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值有重复,(有子目录时)

如何改,谢谢
展开
 我来答
长发飘飘的和尚4f
推荐于2016-05-12 · TA获得超过967个赞
知道小有建树答主
回答量:226
采纳率:0%
帮助的人:296万
展开全部
因为你是递归函数,所以当第一次执行该函数时数组$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。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式