it-swarm.com.de

So richten Sie die Konsole in PHP aus

Ich versuche, ein Skript über die Eingabeaufforderung in PHP auszuführen und das Ergebnis in tabellarischer Form anzuzeigen. Aufgrund der unterschiedlichen Zeichenlänge von Wörtern kann ich das Ergebnis jedoch nicht korrekt ausrichten.

Ich möchte ein Ergebnis wie dieses

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

Kann mir bitte jemand helfen, diese Ausgabe in PHP auf Konsole zu bekommen.

Danke im Voraus

25
user519846

Wenn Sie Bibliotheken nicht verwenden möchten (oder aus irgendeinem Grund nicht dürfen), können Sie die Standardfunktionen von php printf / sprintf verwenden.

Das Problem dabei ist, dass Sie bei Werten mit variabler und nicht begrenzter Breite entscheiden müssen, ob lange Werte abgeschnitten werden sollen oder das Tabellenlayout unterbrochen wird.

Erster Fall:

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

Die Ausgabe ist

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

Zweiter Fall:

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

Und hier bekommen wir

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

Wenn beides nicht Ihren Anforderungen entspricht und Sie wirklich eine Tabelle mit Spalten mit fließender Breite benötigen, müssen Sie die maximale Breite der Werte in jeder Spalte berechnen. Aber genau so funktioniert PEAR::Console_Table.

54
Hnatt

Sie können PEAR :: Console_Table verwenden:

Console_Table hilft Ihnen beim Anzeigen tabellarischer Daten auf einem Terminal/Shell/Konsole.

Beispiel:

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

Ausgabe:

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

Verwenden Sie am besten das Pear-Paket Console_Table ( http://pear.php.net/package/Console_Table/ ).

Um - auf einer Konsole zu verwenden, müssen Sie das Pear-Paket installieren und Folgendes ausführen:

pear install Console_Table

dies sollte das Paket herunterladen und installieren. Sie können dann ein Beispielskript verwenden, z.

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

Sie können die aktuelle einfache Bibliothek PHP ConsoleTable ausprobieren, wenn Sie die Standardfunktionen PHP printf / sprintf nicht verwenden möchten Birnenpaket PEAR :: Console_Table .

Beispiel:

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

Ausgabe:

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

Weitere Beispielanwendungen finden Sie auf seiner Github-Seite .

2
Sithu

Mit dem CLIFramework - Tabellengenerator können Sie die Arbeit sehr einfach erledigen und Textausrichtung, Textfarbe, Hintergrundfarbe, Textumbruch, Textüberlaufbehandlung usw. Unterstützen

Hier ist das Tutorial: https://github.com/c9s/CLIFramework/wiki/Using-Table-Component

Beispielcode: 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
c9s

Zu alt, aber ich habe jetzt das Gleiche durchlaufen und str_pad verwendet, nur die Länge als die Größe Ihrer Spalte festgelegt und das wars

grüße.

1
Erwin

Nur für den Fall, dass jemand das in PHP tun möchte, habe ich ein Gist auf Github gepostet

https://Gist.github.com/redestructa/2a7691e7f3ae69ec5161220c99e2d1b3

einfach anrufen:

$output = $tablePrinter->printLinesIntoArray($items, ['title', 'chilProp2']);

möglicherweise müssen Sie den Code anpassen, wenn Sie eine PHP-Version verwenden, die älter als 7.2 ist

rufen Sie danach je nach Umgebung echo oder writeLine auf.

0
redestructa