PHP 迭代器的使用

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";
		}
		//

 

转载于:https://my.oschina.net/kakoi/blog/535173

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值