文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

5whys分析法在美团工程师中的实践

前言 网站的质量和稳定性对于用户和公司来说至关重要,但是在网站的快速发展过程中,由于各种原因导致事故不可避免的发生,这些大大小小的事故对公司难免会造成一些负面的影响,为了避免同类...

Skqing
29分钟前
2
0
Android 接收监听开机完成,并且开机自启动

1,定义一个广播接收者的类 ,并重写抽象方法 public class BootCompleteReceiver extends BroadcastReceiver 2,在Androidmanifest 注册 <receiver android:name=".receiver.BootCompleteRece......

lanyu96
33分钟前
2
0
小程序记录

1、button的边框、角等需要在伪元素after修改去除

originDu
35分钟前
1
0
微博什么技术啊……还说支持八个明星并发出轨,结果…

是的,大家可能都知道了,女神张靓颖结婚了。。 我去,写错了,是————赵丽颖。 为什么我头脑一瞬间出现的是张靓颖,作为一个码农,技术宅,拼音缩小都是 ZLY,博主我真有点傻傻分不清楚了...

Java技术栈
35分钟前
12
0
模块化

1,什么是模块化? 模块化是指将一个复杂的系统分解为多个模块,方便编码。 2,为什么要用模块化? 降低复杂性,降低代码耦合度,部署方便,提高效率。 3,模块化的好处? a,避免命名冲突,减少...

羊皮卷
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部