PHP-Iterator迭代器(遍历)接口详讲

echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ";
class Test implements Iterator{
    private $list;
    private $i=0;
    private $valid=false;
    public function __construct($array=array()){
        $this->list=$array;
    }
    /**
     * 将索引指定到首个元素
     * {@inheritDoc}
     * @see Iterator::rewind() 
     */
    function rewind(){
        echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';  
        $this->valid=(false !==reset($this->list));
    }
    /**
     * 返回当前元素
     * {@inheritDoc}
     * @see Iterator::current()
     */
    function current(){
        echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';  
        return current($this->list);
    }
    /**
     * 索引指向下一个元素
     * {@inheritDoc}
     * @see Iterator::next()
     */
    function next(){
        echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';  
        $this->valid=(false !== next($this->list));
    }
    /**
     * 返回当前元素键值
     * {@inheritDoc}
     * @see Iterator::key()
     */
    function key(){
        echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';  
        return key($this->list);
    }
    /**
     * 判断下个是否有下个元素
     * {@inheritDoc}
     * @see Iterator::valid()
     */
    function valid(){
        echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';  
        return $this->valid;
    }
}

$list=array(1,2,3);
$test=new Test($list);
//foreach循环方式
foreach ($test as $key=>$val){
    echo '输出索引为'.$key.'的元素值为:'.$val.'<br/><br/>';
}

echo '----------------结束分隔线-----------------------<br/>';
$second=new Test($list);
//while循环方式
$second->rewind();
while($second->valid()){
    echo '输出索引为'.$second->key().'的元素值为:'.$second->current().'<br/><br/>';
    $second->next();
}

echo '--------------------结束分隔线----------------------<br/>';


输出格式:

第1步:执行 Test::rewind
第1步:执行 Test::valid
第2步:执行 Test::current
第3步:执行 Test::key
输出索引为0的元素值为:1

第4步:执行 Test::next
第2步:执行 Test::valid
第5步:执行 Test::current
第6步:执行 Test::key
输出索引为1的元素值为:2

第7步:执行 Test::next
第3步:执行 Test::valid
第8步:执行 Test::current
第9步:执行 Test::key
输出索引为2的元素值为:3

第10步:执行 Test::next
第4步:执行 Test::valid
----------------结束分隔线-----------------------
第1步:执行 Test::rewind
第1步:执行 Test::valid
第2步:执行 Test::key
第3步:执行 Test::current
输出索引为0的元素值为:1

第4步:执行 Test::next
第2步:执行 Test::valid
第5步:执行 Test::key
第6步:执行 Test::current
输出索引为1的元素值为:2

第7步:执行 Test::next
第3步:执行 Test::valid
第8步:执行 Test::key
第9步:执行 Test::current
输出索引为2的元素值为:3

第10步:执行 Test::next
第4步:执行 Test::valid
--------------------结束分隔线----------------------
执行到valid返回false时,则循环结束

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值