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版本的问题