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" }
这里有段跟你类似的代码,里面有递归的具体流程分析,你可以看看