Iterator - 最基本的迭代器
RecursiveIteratorIterator -用来遍历RecursiveIterators
FilterIterator -对数据进行过滤,只返回相匹配的数据
LimitIterator - 对其数据的子集的迭代进行限制的过滤器
<?php
class BasicIterator implements Iterator{
private $key = 0;
private $data = array(
"hello","world","asd"
);
public function __construct(){
//foreach($data as $key => $value){
//echo $key;
//}
}
//返回迭代器第一个元素
public function rewind(){
$this->key = 0;
}
//返回当前元素
public function current(){
return $this->data[$this->key];
}
//返回当前元素的键
public function key(){
return $this->key;
}
//移动位置到下一个元素
public function next(){
$this->key++;
//next 来递增指针
return true;
}
//检查当前位置是否有效
public function valid(){
return isset($this->data[$this->key]);
}
}
$i = new BasicIterator();
// var_dump($i);
// foreach($i as $key => $value){
// echo $key."=====".$value;
// echo "</br>";
// }
$i->rewind();
do{
echo $key = $i->key();
echo $value = $i->current();
}while($i->next() && $i->valid());
迭代器的重要特点就是递归
RecursiveIterator 是数据结构,目的是提供一个标准的方式
RecursiveIteratorIterator用于遍历数据结构,可用来遍历多重数组
<?php
$array = array(
"hello",array(
"world"
),array(
"how",
array("are","you")
),"donging"
);
//var_dump($array);
$rec = new RecursiveArrayIterator($array);
$res = new RecursiveIteratorIterator($rec);
foreach($res as $key => $value){
echo "Depth".$res->getDepth()."</br>";
echo "key-------------".$key."</br>";
echo "value--------".$value."</br>";
}
FilterIterator 对迭代进行过滤,跳过不符合条件的值,通过添加一个accept方法,这个方法必须返回一个bool值
class EvenFilterIterator extends FilterIterator{
public function accept(){
$iterator = $this->getInnerIterator(); //获取内部迭代器
$key = $iterator->key();
if($key%2==0){
return true;
}
return false;
}
}
$a = array(
0 => "hello",
1 => "fuck",
2 => "you",
3 => "shit"
);
$iterator = new ArrayIterator($a);
$filter = new EvenFilterIterator($iterator);
foreach($filter as $key => $value){
echo $key."==="."$value";
}
LimitIterator返回数组中 0-2 的元素
<?php
$array = array(
"hello",
"world",
"how",
"are",
"you",
"doing?"
);
$iterator = new ArrayIterator($array);
$limitItreator = new LimitIterator($iterator,0,2);
foreach($limitItreator as $key => $value){
echo "$key------$value";
}
//