Home  >  Article  >  Backend Development  >  目录遍历优化

目录遍历优化

WBOY
WBOYOriginal
2016-06-20 12:44:431069browse

我写了一段代码,实现了遍历目录以及该目录下的所有文件,功能是实现了,但是总觉得代码有优化的余地,希望各位大神帮忙瞧瞧。 //指定页面编码方式
header('Content-type:text/html;charset=utf-8');

$dir='f:/dir';

//方法调用
search_all_dir($dir);

//遍历目录的方法
function search_all_dir($dir)
{
if(is_dir($dir))
{
$handle=opendir($dir);

$piarr=array('.','..');

while($file=readdir($handle))
{
if(in_array($file,$piarr)==FALSE)
{
if(is_dir($dir.'/'.$file))
{
echo '目录名称:  '.$file.'
';
$files=search_all_file($dir.'/'.$file);
if(isset($files[0]))
{
echo '该目录下的所有文件:'.'
';
foreach($files as $filel)
{
echo ' '.$filel;
}

}
search_all_dir($dir.'/'.$file);
}
}

}
}
else
{
echo $dir.'不是合法目录或不是目录,强制退出';
}

}

//遍历特定目录下的所有文件
function search_all_file($dir)
{
$files=array();
if(is_dir($dir))
{
$handle=opendir($dir);

$piarr=array('.','..');

while($file=readdir($handle))
{
if(in_array($file,$piarr)==FALSE)
{
if(is_dir($dir.'/'.$file)==FALSE)
{
 $files[]=' '.$file.'
';

}
}

}
}

return $files;

}


回复讨论(解决方案)

使用目录函数写,也就是这样了
用目录迭代器简单点

  $ite = new RecursiveDirectoryIterator($dir);  $nbfiles=0;  foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {    if(is_dir($filename)) continue;    echo $filename . '<br>';  }
不过目录迭代器是按文件的创建时间遍历的,有时结果比较怪异

我一般使用 glob 函数遍历
$r = glob('images/*');for($i=0; $i<count($r); $i++) {  if(is_dir($r[$i])) $r = array_merge($r, glob($r[$i] . '/*'));}print_r($r);
glob 的结果是按文件名排序的,你可以控制他不排序

glob 另一个用法可以轻松的找到指定的文件
$p = '*/';$f = 'ide_tmp.php';$r = array();for($i=0; $i<3; $i++) {  $t = glob($p.$f);  if($t) $r = array_merge($r, $t);  $p .= '*/';}print_r($r);
这样就可以找到3层目录已内的全部 ide_tmp.php 文件

谢谢你的耐心回答,多谢 了,我的目的在于如何优化改进我的代码,函数不改变的情况下。谢谢

<?php	//指定页面编码方式	header('Content-type:text/html;charset=utf-8');	$dir='f:/dir';	//方法调用	search_all_dir($dir);	//遍历目录的方法	function search_all_dir($dir)	{		if(is_dir($dir))		{			$handle=opendir($dir);						$piarr=array('.','..');			while($file=readdir($handle))			{					if(in_array($file,$piarr)==FALSE)					{						if(is_dir($dir.'/'.$file))						{							echo '目录名称:  '.$file.'<br>';							$files=search_all_file($dir.'/'.$file);							if(isset($files[0]))							{								echo '该目录下的所有文件:'.'<br>';								foreach($files as $filel)								{									echo ' '.$filel;								}							}							search_all_dir($dir.'/'.$file);						}					}						}		}		else		{			echo $dir.'不是合法目录或不是目录,强制退出';		}	}		//遍历特定目录下的所有文件	function search_all_file($dir)	{		$files=array();		if(is_dir($dir))		{			$handle=opendir($dir);						$piarr=array('.','..');			while($file=readdir($handle))			{					if(in_array($file,$piarr)==FALSE)					{						if(is_dir($dir.'/'.$file)==FALSE)						{							 $files[]=' '.$file.'<br>';													}					}						}		}				return $files;	}

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn