PHP遍历目录函数,出问题了,期待高手解释

来源:百度知道 编辑:UC知道 时间:2024/06/17 08:01:23
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值有重复,(有子目录时)

如何改,谢谢

因为你是递归函数,所以当第一次执行该函数时数组$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 ); //关闭目录
re