Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make alignment on console in php

I am trying to run a script through command prompt in PHP and trying to show the result in tabular form. But due to different character length of words I am not able to show the result properly align.

I want result like this

Book                  ISBN      Department
Operating System      101       CS
C                     102       CS
java                  103       CS

Can anyone please help me to get this output like this in php on console.

Thanks in advance

like image 633
user519846 Avatar asked Aug 12 '11 10:08

user519846


4 Answers

If you don't want (or not allowed for some reason) to use libraries, you can use standard php printf / sprintf functions.

The problem with them that if you have values with variable and non-limited width, then you will have to decide if long values will be truncated or break table's layout.

First case:

// fixed width
$mask = "|%5.5s |%-30.30s | x |\n";
printf($mask, 'Num', 'Title');
printf($mask, '1', 'A value that fits the cell');
printf($mask, '2', 'A too long value the end of which will be cut off');

The output is

|  Num |Title                          | x |
|    1 |A value that fits the cell     | x |
|    2 |A too long value the end of wh | x |

Second case:

// only min-width of cells is set
$mask = "|%5s |%-30s | x |\n";
printf($mask, 'Num', 'Title');
printf($mask, '1', 'A value that fits the cell');
printf($mask, '2', 'A too long value that will brake the table');

And here we get

|  Num |Title                          | x |
|    1 |A value that fits the cell     | x |
|    2 |A too long value that will brake the table | x |

If neither of that satisfies your needs and you really need a table with flowing width columns, than you have to calculate maximum width of values in each column. But that is how PEAR::Console_Table exactly works.

like image 73
Hnatt Avatar answered Nov 04 '22 05:11

Hnatt


You can use PEAR::Console_Table:

Console_Table helps you to display tabular data on a terminal/shell/console.

Example:

require_once 'Console/Table.php';

$tbl = new Console_Table();

$tbl->setHeaders(array('Language', 'Year'));

$tbl->addRow(array('PHP', 1994));
$tbl->addRow(array('C',   1970));
$tbl->addRow(array('C++', 1983));

echo $tbl->getTable();

Output:

+----------+------+
| Language | Year |
+----------+------+
| PHP      | 1994 |
| C        | 1970 |
| C++      | 1983 |
+----------+------+
like image 34
powtac Avatar answered Nov 04 '22 03:11

powtac


Your best option is to use the Pear Package Console_Table ( http://pear.php.net/package/Console_Table/ ).

To use - on a console you need to install the pear package, running:

pear install Console_Table

this should download the package and install. You can then use a sample script such as:

require_once 'Console/Table.php';

$tbl = new Console_Table();
$tbl->setHeaders(
    array('Language', 'Year')
);
$tbl->addRow(array('PHP', 1994));
$tbl->addRow(array('C',   1970));
$tbl->addRow(array('C++', 1983));

echo $tbl->getTable();
like image 9
dotbill Avatar answered Nov 04 '22 05:11

dotbill


You could try the recent simple PHP library ConsoleTable if you don't want to use the standard PHP functions printf/sprintf or the pear package PEAR::Console_Table.

Example:

require_once 'ConsoleTable.php';

$table = new LucidFrame\Console\ConsoleTable();
$table
    ->addHeader('Language')
    ->addHeader('Year')
    ->addRow()
        ->addColumn('PHP')
        ->addColumn(1994)
    ->addRow()
        ->addColumn('C++')
        ->addColumn(1983)
    ->addRow()
        ->addColumn('C')
        ->addColumn(1970)
    ->display()
;

Output:

+----------+------+
| Language | Year |
+----------+------+
| PHP      | 1994 |
| C++      | 1983 |
| C        | 1970 |
+----------+------+

See more example usages at its github page.

like image 3
Sithu Avatar answered Nov 04 '22 04:11

Sithu