关于遍历文件夹的几个问题

function get_files($dir) {
$files = array();

if(!is_dir($dir)) {
    return $files;
}

$handle = opendir($dir);
if($handle){
    while(false !== ($file = readdir($handle))){
        if ($file != '.' && $file != '..') {
            $filename = $dir . "/"  . $file;

            if(is_file($filename)) {
                $files[] = $filename;
               }else {
                $dir_files = get_files($filename);
                $files = array_merge($files, $dir_files);//$files不是已经置空了吗
            }
        }
    }
    closedir($handle);
}
return $files;

}

这个函数的执行过程中,当遍历到文件夹时,$files不是已经置空了吗,为什么打印出来还有之前遍历的文件或文件夹的路径呢??

图片说明

$files[] = $filename;
怎么让数组等于单个字符串呢

<?php

$str="E:/guagua/text/1";

function get_files($dir) {
//定义一个数组
$files = array();

//判断当前是否是一个文件夹
if(!is_dir($dir)) {
    return $files;
}

//打开一个文件夹得到一个资源
$handle = opendir($dir);
if($handle){

    while(false !==($file = readdir($handle))){

        if ($file != '.' && $file != '..') {

            //filename补充完整了整个路径
            $filename = $dir . "/"  . $file;

            if(is_file($filename)) {

                //将完整路径存入$files数组中
                $files[] = $filename;
            }else {

                //开始递归循环
                $dir_files = get_files($filename);

                //将最后一次返回的数据与倒数第二次数组合并得到新数组,依次类推
                //只会执行30-40行的代码,所以你说的$files = array();是不存在的
                $files = array_merge($files, $dir_files);
            }
        }
    }
    closedir($handle);
}
return $files;

}
var_dump(get_files($str));

//array(2) { [0]=> string(28) "E:/guagua/text/1/2/3/4/4.txt" [1]=> string(25) "E:/guagua/text/1/text.php" }

图片说明这里有段跟你类似的代码,里面有递归的具体流程分析,你可以看看