Version: 1

Type: Function

Category: Other

License: GNU General Public License

Description: These functions allow you to create simple text tables for use in textonly emails, etc. To use them simly call: $table = text_table ($data, "-", "|"); $data should be a two dimensional array containing your rows and columns. Rows should be first, columns second. $data[0][3] would be row 0, column 3. The '-' and '|' are the horizontal and seperating characters, respectively. Let me know if you find this useful.



<?php
// ********************************************************************
// Text table generation functions.
// By Tim O'Donnell, tim@correctclick.com
// Call text_table () to generate a textual table.
// Sizing, etc. is handled automatically.
// $data is a two dimensional array corresponding to your rows and columns.
// $h and $v are your horizontal and vertical character seperators, respectively.
//                   Let me know if you find this useful.
// ********************************************************************

function text_table ($data, $h = "-", $v = "|") {
	
	// Compute the largest value for each column:
	
	$count = count ($data);
	
	$largest[0] = "";
	
	for ($i=0; $i < $count; $i++) {
		
		$row = $data[$i];
		
		foreach ($row as $index => $col) {
			
			$len = strlen($col);
			if (!array_key_exists($index, $largest) OR $largest[$index] < $len) $largest[$index] = $len;
			
		}
		
	}
	
	// We now have $largest, a 1 dimensional array containing the largest lengths of each column.
	
	// Now we feed this into the row generator:
	
	$out = text_table_line ($largest, $h);
	
	for ($i=0; $i < $count; $i++) {
	
		$row = $data[$i];
		$out .= text_table_row ($row, $largest, $h, $v);
		
	}
	
	return $out;
	
	
}

function text_table_row ($row, $largest, $h, $v) {
	
	$out = "";
	
	foreach ($row as $index => $col) {
		
		$colpad = str_pad ($col, $largest[$index]);
		$out .= "$v $colpad ";
		
	}
	
	$out .= "$v\n" . text_table_line ($largest, $h);
	
	
	return $out;
	
}

function text_table_line ($largest, $h) {
	
	$totlength = array_sum($largest) + (count($largest) * 3) + 1; // We add count($largest) because of the space on the $out .= line.	
	$out = str_repeat ($h, $totlength) . "\n";
	
	return $out;
}

?>