下一个 关联数组的迭代器方法

2022-08-30 20:47:34

我想将关联数组与PHP迭代器一起使用:

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

可能吗?

我定义了这些方法:

  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()方法中的代码没有任何影响,因为_position是一个字符串(关联数组的键)。++$this->_position

那么我怎么能去这种类型的数组的下一个元素呢?


答案 1
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;
}

答案 2

为什么不从你的关联创建一个?然后你可以从这里调用,等等,只要你想要...ArrayObjectArraygetIterator()ArrayObjectkey()next()

一些例子:

$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();
}

数组对象
数组生成器