PHP-Iterator迭代器(遍历)接口详讲
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ";
class Test implements Iterator{
private $list;
private $i=0;
private $valid=false;
public function __construct($array=array()){
$this->list=$array;
}
/**
* 将索引指定到首个元素
* {@inheritDoc}
* @see Iterator::rewind()
*/
function rewind(){
echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
$this->valid=(false !==reset($this->list));
}
/**
* 返回当前元素
* {@inheritDoc}
* @see Iterator::current()
*/
function current(){
echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
return current($this->list);
}
/**
* 索引指向下一个元素
* {@inheritDoc}
* @see Iterator::next()
*/
function next(){
echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
$this->valid=(false !== next($this->list));
}
/**
* 返回当前元素键值
* {@inheritDoc}
* @see Iterator::key()
*/
function key(){
echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
return key($this->list);
}
/**
* 判断下个是否有下个元素
* {@inheritDoc}
* @see Iterator::valid()
*/
function valid(){
echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';
return $this->valid;
}
} $list=array(1,2,3);
$test=new Test($list);
//foreach循环方式
foreach ($test as $key=>$val){
echo '输出索引为'.$key.'的元素值为:'.$val.'<br/><br/>';
} echo '----------------结束分隔线-----------------------<br/>';
$second=new Test($list);
//while循环方式
$second->rewind();
while($second->valid()){
echo '输出索引为'.$second->key().'的元素值为:'.$second->current().'<br/><br/>';
$second->next();
} echo '--------------------结束分隔线----------------------<br/>';
输出格式:
第1步:执行 Test::rewind
第1步:执行 Test::valid
第2步:执行 Test::current
第3步:执行 Test::key
输出索引为0的元素值为:1
第4步:执行 Test::next
第2步:执行 Test::valid
第5步:执行 Test::current
第6步:执行 Test::key
输出索引为1的元素值为:2
第7步:执行 Test::next
第3步:执行 Test::valid
第8步:执行 Test::current
第9步:执行 Test::key
输出索引为2的元素值为:3
第10步:执行 Test::next
第4步:执行 Test::valid
----------------结束分隔线-----------------------
第1步:执行 Test::rewind
第1步:执行 Test::valid
第2步:执行 Test::key
第3步:执行 Test::current
输出索引为0的元素值为:1
第4步:执行 Test::next
第2步:执行 Test::valid
第5步:执行 Test::key
第6步:执行 Test::current
输出索引为1的元素值为:2
第7步:执行 Test::next
第3步:执行 Test::valid
第8步:执行 Test::key
第9步:执行 Test::current
输出索引为2的元素值为:3
第10步:执行 Test::next
第4步:执行 Test::valid
--------------------结束分隔线----------------------
执行到valid返回false时,则循环结束
PHP-Iterator迭代器(遍历)接口详讲的更多相关文章
- 56 容器(十)——Iterator迭代器遍历容器
迭代器的获取 LIst与Set容器统一使用他们的对象.Iterator()方法获得迭代器对象,然后使用while循环配合迭代器的方法hasNext()及next()来遍历容器. List<Str ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- 有关map中使用iterate迭代器遍历的不保序问题和list remove(object)的细节问题
今天在做项目的过程中发现了如下两个问题: 一 使用map的iterator迭代器对map进行遍历得到的结果是不保序的,也就是每次输出结果都是不一样的.针对这个问题,看以下iterator迭代器的源码. ...
- Java中的Enumeration、Iterable和Iterator接口详解
前言 在看各类Java书籍或者博文的时候,总是会遇到Enumeration.Iterable和Iterator这三个接口,如果对这几个接口不是很明白的话,总会让自己看着看着就迷惑了,正好这周末,抽空把 ...
- 集合--Collection接口详解&&迭代器
/* * 集合的顶层接口--Collection接口 * 添加 * add() * addAll() * * 遍历集合 * iterator() 迭代器 * * 删除 * remove() * rem ...
- 迭代器:遍历集合元素的操作. iterator()
package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; / ...
- Collection接口【集合】和Iterator迭代器类
1.1集合的概述 前面基础学习并使用过集合ArrayList<E>,那么集合究竟是什么呢? 集合:集合是Java中提供的一种容器,可以用来存储多个数据. 那么意思就是说集合是容器,但是容器 ...
- Java集合【2】--iterator接口详解
目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...
- Java—包装类/System类/Math类/Arrays类/大数据运算/Collection接口/Iterator迭代器
基本类型包装类 8种基本类型对应的包装类如: 将字符串转成基本类型: 将基本数值转成字符串有3种方式: 基本类型直接与””相连接即可:34+" " 调用String的valueOf ...
随机推荐
- ubuntu16.04下安装sublime_text
1 在终端输入: sudo add-apt-repository ppa:webupd8team/sublime-text-3 添加sublime text3的软件源: 2 sudo apt-get ...
- 使用Maven导出项目依赖的jar包
步骤1.进入项目目录(有pom.xml的目录) 2.创建存放导出jar依赖包的目录 3.地址栏输入cmd,回车 4.输入导出命令,回车mvn dependency:copy-dependencies ...
- SPARQL 入门教程
1.准备工作 1.1 下载ZIP 1.2 配置环境变量 1.3 查询文件 vc-db-1.rdf 2. 查询操作 2.1 普通查询 /** * 查询family为"Smith"的 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Zero-Copy技术
概述 考虑这样一种常用的情形:你需要将静态内容(类似图片.文件)展示给用户.那么这个情形就意味着你需要先将静态内容从磁盘中拷贝出来放到一个内存buf中,然后将这个buf通过socket传输给用户,进而 ...
- "context:annotation-config" and "context:component-scan"
1.<context:annotation-config/>注册多个处理器 <context:annotation-config/>作用是向 Spring 容器注册 Autow ...
- Bug笔记:Google Map第一次缩放位置偏移
这是个让人蛋疼的bug,认真查看Google maps API文档的童鞋们一定不会碰到. 我的同事为项目写了个针对map这块的jQuery plugin,然后在项目测试中发现,刚加载完页面时,直接点击 ...
- "portrait"(竖屏) "landscape"(横屏) css设置
取决于浏览器或者设备的方向,HTML元素总是会有"portrait"(竖屏) "landscape"(横屏) class. 你可以在css中如下使用它们: .p ...
- (1.2)mysql 索引概念
索引的存储分类:mysql目前提供了以下4种索引 [1]B-Tree索引:最常见的索引类型,大部分引擎都支持B树索引 [2]HASH索引:只有Memory引擎支持,使用场景简单 [3]R-Tree索引 ...
- linux下的字符界面和图形界面转换
linux下的字符界面和图形界面转换 linux下有六个虚拟终端按键ctrl+alt+F1-F6可以进入相应的虚拟终端永久的话修改/etc/inittab将id:5:initdefault:中的5改成 ...