首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关联数组的Next Iterator方法

问关联数组的Next Iterator方法
EN

Stack Overflow用户
提问于 2012-06-18 04:56:17
回答 5查看 5.4K关注 0票数 18

我想在PHP迭代器中使用一个关联数组:

http://php.net/manual/en/class.iterator.php

有可能吗?

我定义了这些方法:

代码语言:javascript
复制
  public function rewind(){    
    reset($this->_arr);
    $this->_position = key($this->_arr);
  }

  public function current(){    
    return $this->_arr[$this->_position];
  }

  public function key(){
    return $this->_position;
  }

  public function next(){    
    ++$this->_position;
  }

  public function valid(){    
    return isset($this->_arr[$this->_position]);
  }

问题是它不能正确迭代。我只得到一个元素。

我认为这是因为next()方法中的++$this->_position代码没有任何作用,因为_position是一个字符串(关联数组的键)。

那么如何转到这种类型的数组的下一个元素呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-18 05:38:38

代码语言:javascript
复制
function rewind() {
    reset($this->_arr);
}

function current() {
    return current($this->_arr);
}

function key() {
    return key($this->_arr);
}

function next() {
    next($this->_arr);
}

function valid() {
    return key($this->_arr) !== null;
}
票数 33
EN

Stack Overflow用户

发布于 2012-06-18 07:46:24

为什么不从您的关联Array创建一个ArrayObject?然后你可以从这个ArrayObject getIterator(),并调用key(),next()等你想要的…

下面是一些例子:

代码语言:javascript
复制
$array = array('one' => 'ONE', 'two' => 'TWO', 'three' = 'THREE');
// create ArrayObject and get it's iterator
$ao = new ArrayObject($my_array);
$it = $ao->getIterator();
// looping
while($it->valid()) {
    echo "Under key {$it->key()} is value {$it->current()}";
    $it->next();
}

ArrayObject

ArrayIterator

票数 5
EN

Stack Overflow用户

发布于 2012-06-18 05:03:36

http://ideone.com/Fxt0j

代码语言:javascript
复制
class myIterator implements Iterator {
    private $position = 0;
    private $keys;

    public function __construct(array $arr) {
        $this->array = $arr;
        $this->keys = array_keys($arr);
        $this->position = 0;
    }

    function rewind() {
        $this->position = 0;
    }

    function current() {
        return $this->array[$this->key()];
    }

    function key() {
        return $this->keys[$this->position];
    }

    function next() {
        ++$this->position;
    }

    function valid() {
        return isset($this->keys[$this->position]);
    }
}

$it = new myIterator(array(
        'a' => "firstelement",
        'b' => "secondelement",
        'c' => "lastelement",
    ));

foreach($it as $key => $value) {
    var_dump($key, $value);
    echo "\n";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11074730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档