PHP中的迭代器

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

foreach

遍历数组用法

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

输出结果:

键名:0--->键值:2
键名:1--->键值:4
键名:2--->键值:6
键名:3--->键值:8
键名:4--->键值:10

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

最基本的迭代器接口是Iterator

Iterator里面规范了如下方法:

Iterator extends Traversable {
/* 方法 */
abstract public mixed current ( void )//返回当前元素
abstract public scalar key ( void )//返回当前元素的键
abstract public void next ( void )//向前移动到下一个元素
abstract public void rewind ( void )//返回到迭代器的第一个元素
abstract public boolean valid ( void )//检查当前位置是否有效
}
php有对数组指针的操作,可不用定义$position 

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

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

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

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

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

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

使对象可以像数组一样进行foreach循环,要求属性必须是私有。(Iterator模式的PHP5实现,写一类实现Iterator接口)

<?php
    class Test implements Iterator{
	private $item = array('id'=>1,'name'=>'php','myname'=>'tencent');
	//返回到迭代器的第一个元素
	public function rewind(){
		return   reset($this->item);
	}
	//返回当前元素
	public function current(){
		return current($this->item);
	}
	//返回当前元素的键
	public function key(){
		return key($this->item);
	}
	//向前移动到下一个元素
	public function next(){
		return next($this->item);
	}
	//检查当前位置是否有效
	public function valid(){
		return($this->current()!==false);
	}
}
//测试
$t=new Test;
foreach($t as $k=>$v){
	echo $k.'--->'.$v.PHP_EOL;
}
?>

结果

id--->1
name--->php
myname--->tencent
posted @ 2018-11-11 20:04  独孤剑—宇枫  阅读(464)  评论(0编辑  收藏  举报