list = $list; } function makeTable() { $xls = new ExcelTable(); $xls->setRow(1, 1, array_keys($this->list)); foreach($this->data as $n => $item) { $result = array(); foreach($this->list as $key => $c) { if (is_callable($c)) { $result [] = call_user_func($c, $item, $n); } else { if (is_numeric($item[$c])) { $result [] = new Excel_Number($item[$c]); } else { $result [] = $item[$c]; } } } $xls->addRow(1, $result); } return $xls; } function writeTable($data, $file) { $this->data = $data; $xls = new ExcelDocument(); $xls->addTable(array($this, 'makeTable')); $xls->save($file); } } class TableHTMLView { private $list = array(); private $stack = array(); private $result = array(); function writeElement($name, $content) { echo "<".$name.">"; echo $content; echo ""; } function startElement($name) { array_push($this->stack, $name); echo "<".$name.">"; } function endElement() { $name = array_pop($this->stack); echo ""; } function setColumns(array $list) { $this->list = $list; } function writeTable($data) { $this->startElement('table'); $this->startElement('thead'); $this->startElement('tr'); foreach($this->list as $key => $c) { $this->writeElement('th', $key); } $this->endElement(); $this->endElement(); $this->startElement('tbody'); foreach($data as $n => $item) { $this->startElement('tr'); foreach($this->list as $key => $c) { if (is_callable($c)) { $this->writeElement('td', call_user_func($c, $item, $n)); } else { $this->writeElement('td', $item[$c]); } } $this->endElement(); } $this->endElement(); $this->endElement(); } }