关于PHP文件夹遍历函数的理解

nba 发布于 2015/07/29 22:00
阅读 144
收藏 0
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不是已经置空了吗,为什么打印出来还有之前遍历的文件或文件夹的路径呢??



加载中
0
封心
封心
置空什么?下面好几个赋值呢
0
nba
nba

这里不有段重新声明的吗?

0
OSC688888
OSC688888
第一次调用get_files里面的$file和第二次调用get_files里面的$file不是同一个。
nba
nba
当遍历的文件夹中有子文件夹时,执行到 $dir_files = get_files($filename); $files = array_merge($files, $dir_files); 这一段时,会递归调用,当该子文件夹循环完后,再怎么执行的?
nba
nba
能说得具体点吗 具体说说这个函数执行的过程
0
mickelfeng
mickelfeng
<?php
$it = new RecursiveDirectoryIterator("./baidu_delcache");
foreach(new RecursiveIteratorIterator($it) as $file) {
    echo $file . "\n";
}
OSC688888
OSC688888
回复 @nba : 这个是SPL。
mickelfeng
mickelfeng
遍历文件夹。
nba
nba
这是什么????
0
月影又无痕
月影又无痕
glob多好用啊
0
inuxor
inuxor

有函数用函数,没函数找标准库,标准库都没有网上搜去,网上没有,才轮到自己写。

现在大家对标准库的极度蔑视是非常不应该的。

0
ljmready
ljmready

 $files[] = $filename;

这里不是置空。

https://secure.php.net/manual/zh/language.types.array.php

如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

nba
nba
我说这个函数的第一行,这种写法是重新声明
0
ljmready
ljmready
它递归了
nba
nba
你能讲得详细点吗,讲一下运行的过程(包括内存分配之类的)
返回顶部
顶部