[原创] Tips: 两种目录遍历的方法

本文介绍两种PHP实现的目录遍历方法:递归函数ErgodicDirectory1和利用栈实现的非递归函数ErgodicDirectory2。这两种方法适用于删除、统计磁盘占用等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


目录的遍历是个老问题,主要用在目录遍历类操作,比如删除、统计磁盘占用等等情况。目录就是一个典型的树形结构,递归是最简单的方法了。

function ErgodicDirectory1($dir) {
    
$dp = opendir($dir);
    
while ($file = readdir($dp)) {    
        
if ($file!='.' && $file!='..') {
            
$path = $dir ."/". $file;
            
if (is_dir($path)) {
                
echo "目录:" .$path. chr(10);
                ErgodicDirectory1(
$path);
            } 
else {
                
echo "文件:" .$path. chr(10);
            }
        }        
    }
    
closedir($dp);
}    

 

利用一个栈来递归消除:

function ErgodicDirectory2($dir) {
    
$stack = array($dir);
    
while (!empty($stack)) {
        
$curr_dir = array_pop($stack);        
        
if ($dp = opendir($curr_dir)) {
            
while (($file = readdir($dp))) {
                
if ($file!='.' && $file!='..') {
                    
$curr_file = "$curr_dir/$file";
                    
if (is_dir($curr_file)) {    
                        
echo "目录:". $curr_file . chr(10);                    
                        
$stack[] = $curr_file;
                    } 
else {
                        
echo "文件:". $curr_file . chr(10);
                    }
                }
            }
            
closedir($dp);
        }        
    }
}

 

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值