如何迭代具有按特定顺序键的数组的类

时间:2018-04-16 08:24:29

标签: php

我有三个类: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的内容。

0 个答案:

没有答案