文档章节

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
南宁
php的迭代器

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

stone_
2016/07/07
24
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中迭代器问题求助

在untitled1.php中my是实现了iterator接口,在untitled3.php中实例化li类,并将$one存在session中,通过一个连接,连接到untitled2.php中,并在untitled2.php中继续使用迭代,为什么没有返回...

步惊云
2012/11/03
414
1
复习PHP-语言参考-预定义接口

1.Traversable 他是一个遍历接口规范 注意:发现一个有用的函数getdeclaredclasses,可以以数组形式显示当前脚本下所有已经定义的类名 2.Iterator Iterator迭代器继承自Traversable,是一种遍...

qzd1989
2014/05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud SpringBoot mybatis分布式Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用...

itcloud
5分钟前
0
0
c++ std::bind和std::function

定义于头文件 <functional> std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind // bind 用例#include <iostream>#include <functional> // 自定义的一......

SibylY
8分钟前
0
0
SecureCRT的安装与破解(过程很详细!!!)

SecureCRT的安装与破解(过程很详细!!!) SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方...

DemonsI
12分钟前
0
0
介绍几款可用的web应用防火墙

目前有两款,基于软件和基于应用程序的web应用防火墙。基于软件的产品布置在Web服务器上,而基于应用程序的产品放置在Web服务器和互联网接口之间。两种类型的防火墙都会在数据传入和传出web...

上树的熊
19分钟前
1
0
用Visual Studio开发以太坊智能合约

区块链和以太坊 自从我熟悉区块链、以太坊和智能合约以来,一直失眠。 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议使用以太坊网站官方客户端应用程序(Ethereum Wallet)也...

geek12345
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部