文档章节

php Iterator

 张敏樱木花道
发布于 2015/04/09 10:21
字数 551
阅读 22
收藏 0

          

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


© 著作权归作者所有

共有 人打赏支持
粉丝 4
博文 39
码字总数 23654
作品 0
南宁
私信 提问
Laravel5.2之PHP对象遍历(Iterator)

说明:本文章主要讲述PHP的对象遍历(Iterator)知识点。由于Laravel框架中就在集合(Collection)中用到了对象遍历知识点,故记录并学习之。同时,作者会将开发过程中的一些截图和代码黏上去,提...

botkenni
2016/10/24
27
0
php-SPL库迭代器类

SPL提供了多个迭代器类,分别提供了迭代访问、过滤数据、缓存结果、控制分页等功能。,因为php总是在不断壮大,我尽可能列出SPL中所有的迭代类。下面其中一些迭代器类是需要php5.4,另外一些...

snowing1990
2016/03/04
4
0
php的迭代器

PHP5开始支持了接口, 并且内置了Iterator接口, 所以如果你定义了一个类,并实现了Iterator接口,那么你的这个类对象就是ZENDITEROBJECT,否则就是ZENDITERPLAIN_OBJECT. 对于ZENDITERPLAIN...

stone_
2016/07/07
24
0
PHP SPL笔记

PHP SPL笔记 作者: 阮一峰 日期: 2008年7月 8日 这几天,我在学习PHP语言中的SPL。 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记。不然记不住,以后...

晨曦之光
2012/03/09
495
1
Go 重构 PHP 项目的一个神器 jsoniter

Go 和 PHP 通信是痛苦的,PHP 这个神奇的 json ,各种奇奇怪怪的 json 都能生成出来,如果一开始就奇怪直接用interface也就算了,最可怕那种是类型会变。 在用 Go 重构 PHP 项目的时候,两个...

anoty
11/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 这就是不要女朋友的理由

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @狄安娜的猫 :分享丁家鑫的单曲《丁家鑫 - 克罗地亚狂想曲 - 古筝remix》 《丁家鑫 - 克罗地亚狂想曲 - 古筝remix》 手机党少年们想听歌,请...

小小编辑
34分钟前
206
10
CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
4
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
5
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部