文档章节

php Iterator

 张敏樱木花道
发布于 2015/04/09 10:21
字数 551
阅读 22
收藏 0
点赞 0
评论 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 ⋅ 0

Laravel5.2之PHP对象遍历(Iterator)

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

botkenni ⋅ 2016/10/24 ⋅ 0

php-SPL库迭代器类

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

snowing1990 ⋅ 2016/03/04 ⋅ 0

php中迭代器问题求助

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

步惊云 ⋅ 2012/11/03 ⋅ 1

复习PHP-语言参考-预定义接口

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

qzd1989 ⋅ 2014/05/03 ⋅ 0

洪柏利/PHP_SPL

SPL SPL的常用数据结构以及常用迭代器等,主要是参考慕课网的《站在巨人的肩膀上写代码-SPL》教程 1-1 概述 1. 什么是SPL SPL是Standard PHP Library的缩写 官方定义:The Standard PHP Libr...

洪柏利 ⋅ 01/11 ⋅ 0

PHP 5.5.0 beta1 发布

PHP 发布了 5.5.0 的首个 Beta 版本,包括如下改进: Added Zend Opcache extension (but disabled by ini setting), Added array_column function which returns a column in a multidimen......

红薯 ⋅ 2013/03/23 ⋅ 11

PHP设计模式(6)迭代器模式

迭代器(Iterator)模式,在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代。 迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一...

技术小美 ⋅ 2017/11/17 ⋅ 0

vc6.0的项目在vs2012编译通不过,出现很多无法解析的外部符号怎么办?

麻烦帮我看一下这个项目: http://www.bdwm.net/bbs/showattach.php?filename=M.1362103776.A&file=Y3Jhd2xlci56aXA= 我的编译结果: 错误 10 error LNK2019: 无法解析的外部符号 impCrtDbgR...

qinuxman ⋅ 2013/03/01 ⋅ 2

php 安装redis扩展

第一 下载:git上下载redis的扩展包 git clone https://github.com/nicolasff/phpredis 第二 挂载:在shell中输入 phpize 【查看适合的版本信息】 ./configure 编译 【phpize是用来扩展php扩...

崔小涣 ⋅ 2015/10/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 26分钟前 ⋅ 2

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部