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