在oschina上分享了自己写的递归查找指定目录下所有文件的php代码。今天有位网友ichenshy分享了一个用迭代实现的例子。仔细阅读,这段代码写得也很精辟。比我的递归方法效果更好,他使用堆栈的办法我从未想到过,特收藏备用。
function scanfiles($dir){
if ( ! is_dir($dir) ) return array();
$dir = rtrim(str_replace('\\','/',$dir),'/').'/';
$dirs = array($dir);
$rt = array();
do{
$dir = array_pop($dirs);//弹出一个目录
$tmp = scandir($dir);//获取目录列表
foreach ( $tmp as $f ){
if ( $f == '.' || $f == '..') continue;
$path = $dir . $f;
if ( is_dir($path) ) {//如果是目录就将path压入目录堆栈,等待下次使用
array_push($dirs,$path.'/');
} else if(is_file($path)) {//如果是文件就放入文件数组
$rt[] = $path;
}
}
} while ( $dirs );
return $rt;
}