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