php迭代器

php提供了一个语法结构用于遍历数组和对象

foreach

遍历数组用法

1 <php
2 //定义一个数组
3 $arr = array("1","2","3","4","5");
4 //用foreach遍历
5 foreach($arr as $key => $value){
6     echo '键名:'.$key.'键值:'.$value."<br>";
7 }8 ?>    

输出结果:

键名:0键值:1
键名:1键值:2
键名:2键值:3
键名:3键值:4
键名:4键值:5

而foreach则不能直接遍历对象里面的属性,需要通过迭代器(预定义接口)

最基本的迭代器接口是Iterator

Iterator里面规范了如下方法:

1 Iterator extends Traversable {
2 /* 方法 */
3 abstract public mixed current ( void )//返回当前元素
4 abstract public scalar key ( void )//返回当前元素的键
5 abstract public void next ( void )//向前移动到下一个元素
6 abstract public void rewind ( void )//返回到迭代器的第一个元素
7 abstract public boolean valid ( void )//检查当前位置是否有效
8 }

要进行遍历的类必须实现Iterator里面的抽象方法。

举个例子

 1 class Season implements Iterator{
 2     private $position = 0;//指针指向0
 3     private $arr = array('春','夏','秋','冬');
 4     public function rewind(){
 5         return $this -> position = 0;
 6     }
 7     public function current(){
 8         return $this -> arr[$this -> position];
 9     }
10     public function key(){
11         return $this -> position;
12     }
13     public function next() {
14         ++$this -> position;
15     }
16 
17     public function valid() {
18         return isset($this -> arr[$this -> position]);
19     }
20 }
21 $obj = new Season;
22 foreach ($obj as $key => $value) {
23     echo $key.':'.$value."
";
24 }
25 ?>

结果:

0:春
1:夏
2:秋
3:冬

php有对数组指针的操作,可不用定义$position 

1.key();从关联数组中取得键名,没有取到返回NULL

2.current();返回数组中当前单元

3.next();将数组中的内部指针向前移动一位

4.prev();将数组的内部指针倒回一位

5.reset();将数组的内部指针指向第一个单元

6.end();将数组的内部指针指向最后一个单元

以上是对迭代器Iterator的简单学习笔记。

原文地址:https://www.cnblogs.com/wwjchina/p/7723499.html