Zend\Text\Table is a component for creating text-based tables on the fly using decorators. This can be helpful for sending structured data in text emails, or to display table information in a CLI application. Zend\Text\Table supports multi-line columns, column spans, and alignment.


Zend\Text\Table expects your strings to be UTF-8 encoded by default. If this is not the case, you can either supply the character encoding as a parameter to the constructor or the setContent() method of Zend\Text\Table\Column. Alternately, if you have a different encoding in the entire process, you can define the standard input charset with Zend\Text\Table\Table::setInputCharset($charset). In case you need another output charset for the table, you can set it with Zend\Text\Table\Table::setOutputCharset($charset).

A Zend\Text\Table\Table object consists of rows which contain columns, represented by Zend\Text\Table\Row and Zend\Text\Table\Column, respectively. When creating a table, you can supply an array with options for the table.

Options include:

Rows are added to the table by creating a new instance of Zend\Text\Table\Row and appending it to the table via the appendRow() method. Rows themselves have no options. You can also provide the appendRow() method with an array of options describing a row; these will then be automatically converted to a row object, containing multiple column objects.

Adding columns follows the same process as adding rows. Create a new instance of Zend\Text\Table\Column and then either set the column options in the constructor or later with the set*() methods. The first parameter is the content of the column; content may have multiple lines, which should be separated by \n characters. The second parameter defines the alignment, which is 'left' by default, but can be any of the following Zend\Text\Table\Column constant values:

The third parameter is the column span. For example, when you provide the value "2", the column will span two columns of the table.

The last parameter defines the encoding of the content, which should be supplied only if the content is neither ASCII nor UTF-8.

To append the column to the row, call appendColumn() in your row object with the column object as a parameter. Alternately, provide a string to the appendColumn() method.

To render the table, use the render() method, or rely on the __toString() implementation to do implicit casting

echo $table;

// or
$tableString = (string) $table`;

Basic Usage

$table = new Zend\Text\Table\Table([
    'columnWidths' => [10, 20]

// Implicitly build rows, by supply an array of column values:
$table->appendRow(['Zend', 'Framework']);

// Or build the row and column manually:
$row = new Zend\Text\Table\Row();

$row->appendColumn(new Zend\Text\Table\Column('Zend'));
$row->appendColumn(new Zend\Text\Table\Column('Framework'));


echo $table;

The above results in the following output:

│Zend      │Framework           │
│Zend      │Framework           │