目录遍历优化

WBOY
Freigeben: 2016-06-20 12:44:43
Original
1073 Leute haben es durchsucht

我写了一段代码,实现了遍历目录以及该目录下的所有文件,功能是实现了,但是总觉得代码有优化的余地,希望各位大神帮忙瞧瞧。 //指定页面编码方式
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>';  }
Nach dem Login kopieren
不过目录迭代器是按文件的创建时间遍历的,有时结果比较怪异

我一般使用 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);
Nach dem Login kopieren
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);
Nach dem Login kopieren
这样就可以找到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;	}
Nach dem Login kopieren

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage