我想在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()方法中的++$this->_position代码没有任何作用,因为_position是一个字符串(关联数组的键)。
那么如何转到这种类型的数组的下一个元素呢?
发布于 2012-06-18 05:38:38
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;
}发布于 2012-06-18 07:46:24
为什么不从您的关联Array创建一个ArrayObject?然后你可以从这个ArrayObject getIterator(),并调用key(),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();
}发布于 2012-06-18 05:03:36
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";
}https://stackoverflow.com/questions/11074730
复制相似问题