Re: How to format CLI tabular data?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tedd wrote:
At 12:05 AM -0700 10/9/07, Jim Lucas wrote:
Daevid Vincent wrote:
Does PHP have any tools like this? I'd prefer not to pull in some PEAR
package or other bloat, but I'll take what I can get if it actually works well. I was hoping there are some tips/tricks to show simple tabular data:
-snip-
notice basic things like alignment, length of data (as in 'tabs' won't work), etc.


Try this out

-snip- code

Jim:

Thanks for the code. I've altered it to display a table in a browser:

http://webbytedd.com/bbb/table/

Code is shown there.

Cheers,

tedd

Wasn't he asking for something that was to display in the console?

I wouldn't use that to display tabular data in a browser.

I will attach what I use to display in a browser.

I updated the comments, I think everything is correct.  Let me know what you think

<?php

/**
 * This class is for creating an HTML table
 *
 * Example usage
 *	$table = new table();
 *	$table->addHeader(	array('ID', 	'FirstName', 	'LastName'),	'header');
 *	$table->addData(	array(1,	'Jim',		'L'),		'rowA');
 *	$table->addData(	array(2,	'Tim',		'H'),		'rowB');
 *	$table->addData(	array(1,	'Jim',		'B'),		'rowA');
 *	$table->addData(	array(2,	'Chris',	'C'),		'rowB');
 *	echo $table->get('table_one', 'some_class');
 *
 *	or
 *
 *	$data[] = array('id' => 1,	'first_name' => 'John',		'last_name' => 'Doe');
 *	$data[] = array('id' => 2,	'first_name' => 'Jonny',	'last_name' => 'Buck');
 *	$data[] = array('id' => 3,	'first_name' => 'James',	'last_name' => 'Smith');
 *	$table = new table();
 *	$table->dump($dataArray);
 *	echo $table->to_s();
 */
class table {
	/**
	 * Purpose is to contain table data for display purposes later
	 *
	 * @type	array()
	 */
	var $table	= array();
	/**
	 * Constructor.
	 *
	 * @return	Class Object
	 */
	function __construct() {
		return $this;
	}
	/**
	 * Constructor, php4 style
	 *
	 * @return	Class Object
	 */
	function table() {
		return $this->__construct();
	}
	/**
	 * Creates a table header row
	 *
	 * This calls to the addRow method to create a list of cells with the $data submitted
	 * It creates <th>...</th> cells
	 *
	 * @param	Your 1-dimensional array of data
	 * @param	Value you would like to set id for the <tr id="..."> tag
	 *
	 * @return	Class Object
	 */
	function addHeader($data, $row_id=null) {
		$this->addRow($data, 'th', $row_id);
		return $this;
	}
	/**
	 * Creates a table data row
	 *
	 * This calls to the addRow method to create a list of cells with the $data submitted
	 * It creates <td>...</td> cells
	 *
	 * @param	Your 1-dimensional array of data
	 * @param	Value you would like to set id for the <tr id="..."> tag
	 *
	 * @return	Class Object
	 */
	function addData($data, $row_id=null) {
		$this->addRow($data, 'td', $row_id);
		return $this;
	}
	/**
	 * Creates a table row, when called
	 *
	 * @param	Data to be displayed
	 * @param	Which type of cells are we creating?  td (default) or th
	 * @param	ID value to be appended to the <tr id='row_...'> tag
	 *
	 * @return	Class Object
	 */
	function addRow($data, $type='td', $row_id=null) {
		$this->table[] = "<tr id='row_{$row_id}'>";
		foreach ( $data AS $id => $cell ) {
			$this->table[] = "<{$type} class='col_{$id}'>".
					htmlspecialchars($cell)."</{$type}>";
		}
		$this->table[] = '</tr>';
		return $this;
	}
	/**
	 * Just build a table from an array full of data
	 *
	 * @param	Your 2-dimensional array of data
	 *
	 * @return	Class Object
	 */
	function dump($data=array()) {
		for ( $x=0; $x<count($data); $x++ ) {
			if ( ( $x % 20) == 0 ) {
				$this->addHeader(array_keys($data[$x]));
			}
			$this->addData($data[$x]);
		}
		return $this;
	}
	/**
	 * Generate and return the built table
	 *
	 * @param	Specify the ID value for the table id attribute
	 * @param	Specify a class for the table class attribute
	 *
	 * @return	if data found, return formatted table
	 *		if no data found, return 'No data to display' message
	 */
	function get($id='', $class='') {
		if ( count($this->table) ) {
			return "\n<table id='{$id}' class='{$class}'
				cellpadding='0' cellspacing='0'>\n".
				join("\n", $this->table)."\n</table>\n";
		}
		return 'No data to display';
	}
	/**
	 * Generate and return the built table
	 *
	 * The purpose of this method is to be forwards compatible.
	 * Most of my new CMS tries to detect if an object has a to_s() method
	 *
	 * @return	results from the get() method
	 */
	function to_s() {
		return $this->get();
	}
}

--
Jim Lucas

   "Some men are born to greatness, some achieve greatness,
       and some have greatness thrust upon them."

Twelfth Night, Act II, Scene V
    by William Shakespeare

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux