📄 matrix.php
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//** * Main HTML_Table_Matrix class * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @package HTML_Table_Matrix * @author Ian Eure <ieure@php.net> * @version Release: @package_version@ * @version CVS: $Revision: 1.4 $ * @copyright (c) 2003-2005 Ian Eure * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @link http://pear.php.net/package/html_table_matrix/ * @see HTML_Table */require_once 'PEAR.php';require_once 'HTML/Table.php';require_once 'HTML/Table/Matrix/Filler.php';/** * Fills a HTML table with data. * * Simple usage: * * // This is the data to put in the table. * $data = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', * 'nine', 'ten'); * $m = &new HTML_Table_Matrix; * $m->setData($data); * // Pick a filler class. We use the stock left-to-right-top-to-bottom here. * $f = &HTML_Table_Matrix_Filler::factory('LRTB'); * $m->accept($f); * // Make the table 2 rows deep by 5 cols wide * $m->setTableSize(2, 5); * // Output the table. * print $m->toHtml(); * * * @package HTML_Table_Matrix * @category HTML * @author Ian Eure <ieure@php.net> * @version Release: @package_version@ * @version CVS: $Revision: 1.4 $ * @copyright (c) 2003-2005 Ian Eure * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @link http://pear.php.net/package/html_table_matrix/ * @see HTML_Table */class HTML_Table_Matrix extends HTML_Table { /** * The filler * * @type object * @access private * @see accept() */ var $_filler = ''; /** * The row to start filling at. Useful if you want to put other stuff in * the table. * * @access private * @var int * @see setFillStart() */ var $_fillStartRow = 0; /** * The column to start filling at. Useful if you want to put other stuff in * the table. * * @access private * @var int * @see setFillStart() */ var $_fillStartCol = 0; /** * The number of rows in the table. 0 = Undefined. * * @access private * @var int * @see setTableSize() */ var $_rows = 0; /** * The number of columns in the table. 0 = Undefined. * * @access private * @var int * @see setTableSize() */ var $_cols = 10; /** * Has the table been filled? * * @access private * @var boolean */ var $_isFilled = FALSE; /** * Data to fill table with * * @access private * @var array * @see setData() */ var $_data = array(); /** * Sets data to fill table with. * * @return void * @param array $data 1-dimensional array of matrix data */ function setData(&$data) { $this->_data = $data; } /** * Set the row & column to start filling at. * * Defaults to (0,0), which is the upper-left corner of the table. Setting * this to a larger value will leave other cells empty, e.g. if you want to * add a header or other information in the table in addition to the matrix * data. * * @param int $row Row to start filling at * @param int $col Column to start filling at * @return void */ function setFillStart($row, $col) { $this->_fillStartRow = $row; $this->_fillStartCol = $col; } /** * Set the size of the resulting table. * * The table will be forced to this size, regardless of whether or not * there is enough (or too much) data to fill it up. If the table size * (rows * cols) is smaller than the amount of data given to us, only * (rows * cols) items are laid out. * * @param int $rows Number of rows, or zero to auto-size. * @param int $cols Number of columns, or zero to auto-size. * @return void */ function setTableSize($rows = 0, $cols = 0) { $this->_rows = $rows; $this->_cols = $cols; } /** * Return the total table size (w * h) * * @return int Table size * @access protected */ function _getTableSize() { if ($this->_cols == 0 || $this->_rows == 0) { return count($this->_data); } return $this->_rows * $this->_cols; } /** * Accept a Filler */ function accept(&$filler) { if (!HTML_Table_Matrix_Filler::isValid($filler)) { return PEAR::raiseError("Provided filler is of the wrong class."); } $this->_filler = $filler; return true; } /** * Calculates the size of the table based on the data provided. * * @access private * @return void * @see setData() */ function _calculateSize() { reset($this->_data); $n = count($this->_data); if (!$this->_rows && $this->_cols) { $this->_rows = ceil($n / $this->_cols); } else if (!$this->_cols && $this->_rows) { $this->_cols = ceil($n / $this->_rows); } } /** * Fills table with provided data. RL & BT modes are not implemented yet. * * This function does the actual laying out of the data into the table. * It isn't necessary to call this unless you want to add or change something * in the table, as toHtml() calls this automatically if the table has not * yet been filled with data. * * @return mixed boolean true on success, PEAR_Error otherwise * @see setData() */ function fillTable() { if (!HTML_Table_Matrix_Filler::isValid($this->_filler)) { return PEAR::raiseError("No Filler has been set."); } $this->_calculateSize(); reset($this->_data); $size = $this->_getTableSize(); $this->_data = array_slice($this->_data, 0, $size); if (isset($this->_filler->callback)) { if (!is_callable($this->_filler->callback) || !is_array($cr = call_user_func($this->_filler->callback, $this->_data))) { return PEAR::raiseError("Invalid filler callback."); } $this->_data = $cr; } for ($i = $index = 0; $i < $size; $i++, $index++) { list($row, $col) = $this->_filler->next($index); $this->_fillCell($row, $col); } $this->_isFilled = TRUE; return true; } /** * Fills a cell with data. * * Note: this depends on the array pointer of $_data pointing at the * right item. Possibly not be the best way to handle this. * * @access private * @param int $row Row of cell to fill. * @param int $col Column of cell to fill. */ function _fillCell($row, $col) { list($null, $data) = each($this->_data); $this->setCellContents($row, $col, $data); } /** * Returns HTML table. Calls fillTable() if the table has not already * been filled. * * @return string HTML Table * @see HTML_Table::toHtml() */ function toHtml() { if (!$this->_isFilled) { $this->fillTable(); } return(parent::toHtml()); }}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -