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开发人员


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。