M M*_*ler 6 php arrays foreach iterator
如果我有一个实现Iterator接口的类,我可以手动控制循环中的迭代方式foreach.但是有没有其他方法可以让我的对象像数组一样?
例如,假设我有一个Guestbook实现的类Iterator,以便我可以迭代foreach (new Guestbook() as $entry).但是,如果我想要反转订单呢?
foreach (array_reverse(new Guestbook()) as $entry)绝对不会工作,因为array_reverse只会接受一个数组.
我想我要问的是,我可以使用Iterator的不仅仅是foreach循环吗?
谢谢.
vas*_*ite 18
Iterator接口的目的是允许您的对象在foreach循环中使用,它不是为了使您的对象像数组一样.如果你想要一个像数组一样的东西,使用一个数组.
您始终可以使用iterator_to_array函数将对象转换为数组,但不能反转该过程.
如果您认为需要反转可迭代对象中元素的顺序,那么您可以创建一个reverse()方法,该方法可能在内部使用array_reverse().像这样: -
class Test implements Iterator
{
private $testing = [0,1,2,3,4,5,6,7,8,9,10];
private $index = 0;
public function current()
{
return $this->testing[$this->index];
}
public function next()
{
$this->index ++;
}
public function key()
{
return $this->index;
}
public function valid()
{
return isset($this->testing[$this->key()]);
}
public function rewind()
{
$this->index = 0;
}
public function reverse()
{
$this->testing = array_reverse($this->testing);
$this->rewind();
}
}
$tests = new Test();
var_dump(iterator_to_array($tests));
$tests->reverse();
var_dump(iterator_to_array($tests));
Run Code Online (Sandbox Code Playgroud)
输出: -
array (size=11)
0 => int 0
1 => int 1
2 => int 2
3 => int 3
4 => int 4
5 => int 5
6 => int 6
7 => int 7
8 => int 8
9 => int 9
10 => int 10
array (size=11)
0 => int 10
1 => int 9
2 => int 8
3 => int 7
4 => int 6
5 => int 5
6 => int 4
7 => int 3
8 => int 2
9 => int 1
10 => int 0
Run Code Online (Sandbox Code Playgroud)
我编写了代码来向自己证明它在发布之前会起作用,并且我认为我可能会把它放到答案中.
| 归档时间: |
|
| 查看次数: |
10274 次 |
| 最近记录: |