• 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时,则循环结束

  • 相关阅读:
    java集合遍历的几种方式总结及比较
    mybatis和hibernate中的懒加载
    数据库的四种连接方式
    Maven常用命令
    windows下nginx的安装及使用
    SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码
    Java实现基于token认证
    开放接口/RESTful/Api服务的设计和安全方案详解
    NIO的一坑一惑小记
    Linux下通过源码编译安装程序
  • 原文地址:https://www.cnblogs.com/sztx/p/9499756.html
Copyright © 2020-2023  润新知