PHP5中增减了Iterator(迭代器),一组有助于导航和处理层级数据的现成接口。这些Iterator显著的减少了处理XML文档树或者文 件集合所需的代码。PHP5中使用大量的Iterator,包括ArrayIterator,CachingIterator,RecursiveIterator,

SimpleXMLIterator,LimitIterator 和DirectoryIterator。

 

下面主要看看使用迭代器和常规方法来进行文件遍历的不同。

/**
  * 任务1:列出一个文件夹中的所有文件
  **/
  function iteratorScan( $DirToScan)
  {
	 $items = new DirectoryIterator($DirToScan);
	 foreach($items as $item)
	 {
		if(!$item->isDot())
		{
			echo $item."<br/>";//这里输出的只是文件的名称,不是全路径
		}
	 }
  }
  
  function normalScan($DirToScan)
  {
	 $items = scandir($DirToScan);
	 foreach($items as $item)
	 {
		if($item != "."  And $item !="..")
		{
				echo $item."<br/>";
		}
	 }
  }
 
 /**
  *	任务2:递归列出所有的文件和文件夹
  **/
 function iteratorRecursiveScan($strDirToScan)
 {
	$item = new RecursiveDirectoryIterator($strDirToScan);
	foreach( new RecursiveIteratorIterator($item) as $file)
	{
		echo $file."<br/>";//注意,这里输出的是全路径
	}
 }
 
 
 function normalRecursiveScan($strDirToScan)
 {
	$handle = opendir($strDirToScan);
	while(false !==($file = readdir($handle)) )
	{
		if($file!="." and $file !="..")
		{
			$strFilePath = $strDirToScan."\\".$file;
			echo $strFilePath."<br/>";
			if(is_dir($strFilePath))
			{
				normalRecursiveScan($strFilePath);
			}
			
		}
	}
	closedir($handle);
 }
 
 /**
  *	任务3:打印目录树
  **/
  function iteratorDirTree($strDirToTree)
  {
	//实际的使用中,并不能用
	$items = new DirectoryTreeIterator($strDirToTree);
	foreach($items as $item)
	{
		echo $item."<br/>";
	}
  }

说明:

任务1二者完成的代码量都差不多。相比之下normalScan完成得比较容易理解。

任务2明显iteratorRecursiveScan的代码少。但对初次使用的迭代器操作的人来说,比较晦涩难懂。

任务3不明原因,代码不能正常执行。可能是php版本的问题


收藏
0个人 收藏