• php设计模式-迭代器


    class CustomIterator implements Iterator
    {
        private $_data;
        private $_index = 0;
    
        public function __construct($data)
        {
            $this->_data = $data;
        }
    
        /**
         * 返回当前指针指向的元素
         * @return mixed
         */
        public function current()
        {
            return $this->_data[$this->_index];
        }
    
        /**
         * 指针向前推一位
         */
        public function next()
        {
            $this->_index ++;
        }
    
        /**
         * 重置指针,将指针指向第一个元素
         */
        public function rewind()
        {
            $this->_index = 0;
        }
    
        /**
         * 返回当前指针位置
         * @return int|mixed
         */
        public function key()
        {
            return $this->_index;
        }
    
        /**
         * 检测指针当前指向是否有效
         * @return bool
         */
        public function valid()
        {
            return count($this->_data) > $this->_index;
        }
    }
    
    $data = array(
        ['name' => 'zhangsan', 'age' => 12, 'career' => 'engineer'],
        ['name' => 'lisi', 'age' => 12, 'career' => 'engineer'],
        ['name' => 'waner', 'age' => 12, 'career' => 'engineer'],
        ['name' => 'faguan', 'age' => 12, 'career' => 'engineer'],
    );
    
    $obj = new CustomIterator($data);
    
    echo '<pre>';
    foreach ($obj as $key => $user) {
        print_r($user);
    }
    
    echo '---------------------------------------------------<br>';
    // 重置指针,相当于数组里的reset()方法
    $obj->rewind();
    
    while ($obj->valid())
    {
        print_r($obj->current());
        $obj->next();
    }
    

      结果:

    Array
    (
        [name] => zhangsan
        [age] => 12
        [career] => engineer
    )
    Array
    (
        [name] => lisi
        [age] => 12
        [career] => engineer
    )
    Array
    (
        [name] => waner
        [age] => 12
        [career] => engineer
    )
    Array
    (
        [name] => faguan
        [age] => 12
        [career] => engineer
    )
    ---------------------------------------------------
    Array
    (
        [name] => zhangsan
        [age] => 12
        [career] => engineer
    )
    Array
    (
        [name] => lisi
        [age] => 12
        [career] => engineer
    )
    Array
    (
        [name] => waner
        [age] => 12
        [career] => engineer
    )
    Array
    (
        [name] => faguan
        [age] => 12
        [career] => engineer
    )
    

      

  • 相关阅读:
    bzoj2815: [ZJOI2012]灾难
    bzoj1188: [HNOI2007]分裂游戏
    bzoj4538: [Hnoi2016]网络
    bzoj3594: [Scoi2014]方伯伯的玉米田
    bzoj2595: [Wc2008]游览计划
    bzoj3277: 串
    Django开发:(3.2)ORM:多表操作
    Django开发:(3.1)ORM:单表操作
    Django:(2)视图层&模板层
    Django开发:(1)django基础 & url控制器
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13353295.html
Copyright © 2020-2023  润新知