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 ...
随机推荐
- hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]
题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他 ...
- FaceBook开源的词向量计算框架
fasttext是个好东西,是由facebook在2016年推出的一个训练词向量的模型.相比于之前Google的word2vec,fasttext可以解决out of vocabulary的问题.fa ...
- Kettle 4.2源码分析第一讲--Kettle 简介
Pentaho Data Integration(PDI)简介 1. PDI结构简介 图 1‑1 PDI核心组件 Spoon是构建ETL Jobs和Transformations的工具.Spoon可以 ...
- ArcGIS API for javascript开发笔记(三)——解决打印输出的中文为乱码问题
感谢一路走来默默支持和陪伴的你~~~ ----------------------欢迎来访,拒绝转载---------------------- 1. 调用ArcGIS API的Print实 ...
- elasticsearch更改mapping,不停服务重建索引(转)
原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...
- CentOS关闭防火墙&SELinux
须知: 防火墙配置文件:/etc/sysconfig/iptables 查看防火墙状态:service iptables status 关闭防火墙:service iptables stop 关闭ip ...
- [.NET]解决EMF图像自动放大空白
在.NET中产生emf主要使用Metafile对象,但在使用过程中会发生图像自动放大,多余空白的问题. 模拟:声明Size(100,100)的区域,并绘制p1(-50,-50)->p2(50,5 ...
- .NET数据挖掘与机器学习开源框架
1. 数据挖掘与机器学习开源框架 1.1 框架概述 1.1.1 AForge.NET AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经 ...
- 查看项目中的laravel的版本
方法1: 使用php artisan --version 方法2: 在项目文件中找vendor\laravel\framework\src\Illuminate\Foundation\Applicat ...
- 随机模拟MCMC和Gibbs Sampling
随机模拟 统计模拟中有一个重要的问题就是给定一个概率分布 p(x),我们如何在计算机中生成它的样本.一般而言均匀分布 Uniform(0,1)的样本是相对容易生成的. 通过线性同余发生器可以生成伪随机 ...