我有三个类:Table,Row和Cell。
Table有一个Rows数组和一个列顺序的数组。
Row有一个Cells数组,Cell有textValue。
Table和Row都实现了IteratorAggregate。
我的问题是Table有一个由用户指定的列顺序,但是当程序迭代行时,它会按照添加的顺序返回单元格。 我试图实现Iterator而不是IteratorAggregate,但我不知道如何传递表所拥有的数组与列的顺序。
我希望尽可能简化迭代,这意味着我希望能够预测表和行。
<?php
class Table implements \IteratorAggregate
{
private $order;
private $rows;
public function __construct()
{
$this->rows = [];
$this->order = [];
}
public function addRow(Row $row){
array_push($this->rows, $row);
}
public function setOrder(Array $order){
$this->order = $order;
}
public function getIterator()
{
return new \ArrayIterator($this->rows);
}
}
class Row implements \IteratorAggregate
{
private $cells;
public function __construct()
{
$this->cells = [];
}
public function addCell(Cell $cell){
array_push($this->cells, $cell);
}
public function getIterator()
{
return new \ArrayIterator($this->cells);
}
}
class Cell extends Model{
public $text;
public function __construct($text = "")
{
$this->text = $text;
}
}
一个例子是一行有cell = [a,b,c]。迭代器总是会给出a,b,c。但是可以在表类中指定顺序并打印类似b,c,a或c,a,b的内容。