php Iterator
作者 ZMAX程序人
erator(迭代器),一组有助于导航和处理层级数据的现成接口。这些Iterator显著的减少了处理XML文档 树或者文件集合所需的代码。PHP5中使用大量的Iterator,包括ArrayIterator,CachingIterator,LimitIterator,RecursiveIterator,SimpleXMLIterator和DirectoryIterator。
下面主要看看使用迭代器和常规方法来进行文件遍历的不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /** * 任务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版本的问题
这是我们的网站http://www.zmax99.com,里面有很多的joomla免费教程,欢迎大家前去下载!
Zmax程序人-----中国joomla开发人员
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。