Jak zrobić wyrównanie na konsoli w php

Próbuję uruchomić skrypt za pomocą wiersza polecenia w PHP i próbuję pokazać wynik w formie tabelarycznej. Ale ze względu na różną długość znaków słowa Nie jestem w stanie pokazać wynik prawidłowo wyrównać.

I want result like this

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

Czy ktoś może mi pomóc uzyskać takie wyjście w php na konsoli.

Z góry dzięki

Author: Roman, 2011-08-12

6 answers

Jeśli nie chcesz (lub nie możesz z jakiegoś powodu) korzystać z bibliotek, możesz użyć standardowego php printf / sprintf Funkcje.

Problem z nimi, że jeśli masz wartości o zmiennej i nieograniczonej szerokości, to będziesz musiał zdecydować, czy długie wartości zostaną obcięte, czy złamać układ tabeli.

Pierwszy przypadek:

// 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');

Wyjście to

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

Drugi przypadek:

// 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');

I tu mamy

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

Jeśli żadna z tych spełnia Twoje potrzeby i naprawdę potrzebujesz tabeli z kolumnami o szerokości przepływu, niż musisz obliczyć maksymalną szerokość wartości w każdej kolumnie. Ale tak właśnie działa.

 51
Author: Hnatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-12 12:36:04

Możesz użyć PEAR:: Console_Table :

Console_Table pomaga wyświetlać dane tabelaryczne na terminal / shell/console.

Przykład:

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();

Wyjście:

+----------+------+
| Language | Year |
+----------+------+
| PHP      | 1994 |
| C        | 1970 |
| C++      | 1983 |
+----------+------+
 29
Author: powtac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-12 10:52:28

Najlepszą opcją jest użycie pakietu Pear Console_Table ( http://pear.php.net/package/Console_Table / ).

Aby użyć-na konsoli należy zainstalować pakiet pear, uruchamiając:

pear install Console_Table

To powinno pobrać pakiet i zainstalować. Następnie możesz użyć przykładowego skryptu, takiego jak:

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();
 7
Author: dotbill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-12 10:53:53

Możesz wypróbować najnowszą prostą bibliotekę PHP ConsoleTable Jeśli nie chcesz używać standardowych funkcji PHP printf/sprintf lub pakiet pear PEAR:: Console_Table .

Przykład:

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()
;

Wyjście:

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

Zobacz więcej przykładowych zastosowań na jego stronie github .

 2
Author: Sithu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-31 10:34:43

Za stary, ale przeszedłem teraz to samo i użyłem str_pad, po prostu ustaw długość jako rozmiar kolumny i tyle

Pozdrawiam.

 1
Author: Erwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-29 22:15:48

Generator tabeli CLIFramework pomaga bardzo łatwo wykonać zadanie i obsługuje wyrównanie tekstu, kolor tekstu, kolor tła, zawijanie tekstu, obsługę przelewu tekstu.. etc

Oto tutorial: https://github.com/c9s/CLIFramework/wiki/Using-Table-Component

Przykładowy kod: https://github.com/c9s/CLIFramework/blob/master/example/table.php

use CLIFramework\Component\Table\Table;

$table = new Table;
$table->setHeaders([ 'Published Date', 'Title', 'Description' ]);
$table->addRow(array( 
    "September 16, 2014",
    "Title",
    "Description",
    29.5
));
$table->addRow(array( 
    "November 4, 2014",
    "Hooked: How to Build Habit-Forming Products",
    ["Why do some products capture widespread attention whil..."],
    99,
));
echo $table->render();
 1
Author: c9s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-13 04:38:35