web-dev-qa-db-fra.com

Comment faire l'alignement sur la console en php

J'essaie d'exécuter un script à l'aide de la commande Invite dans PHP et d'essayer d'afficher le résultat sous forme de tableau. Mais en raison de la longueur différente des mots, je ne parviens pas à afficher le résultat correctement.

Je veux un résultat comme ça

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

Quelqu'un peut-il s'il vous plaît m'aider à obtenir cette sortie comme ceci en php sur console.

Merci d'avance

25
user519846

Si vous ne voulez pas (ou n'êtes pas autorisé pour une raison quelconque) à utiliser des bibliothèques, vous pouvez utiliser les fonctions standard php printf / sprintf

Le problème avec eux, c'est que si vous avez des valeurs de largeur variable et non limitée, vous devrez alors décider si les valeurs longues seront tronquées ou si la présentation de la table sera brisée.

Premier cas:

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

La sortie est

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

Deuxième cas:

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

Et nous voilà

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

Si rien de tout cela ne répond à vos besoins et que vous avez réellement besoin d'un tableau avec des colonnes de largeur variable, vous devez calculer la largeur maximale des valeurs dans chaque colonne. Mais c’est ainsi que fonctionne exactement PEAR::Console_Table.

54
Hnatt

Vous pouvez utiliser PEAR :: Console_Table :

Console_Table vous aide à afficher des données tabulaires sur un terminal/shell/console .

Exemple:

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

Sortie:

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

Votre meilleure option consiste à utiliser le paquet Pear Console_Table ( http://pear.php.net/package/Console_Table/ ).

Pour utiliser - sur une console, vous devez installer le paquet pear, en exécutant:

pear install Console_Table

cela devrait télécharger le paquet et l'installer. Vous pouvez ensuite utiliser un exemple de script tel que:

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

Vous pouvez essayer la bibliothèque simple PHP récente ConsoleTable si vous ne souhaitez pas utiliser les fonctions standard PHP printf / sprintf ou le package pear PEAR :: Console_Table

Exemple:

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

Sortie:

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

Voir plus d'exemples d'utilisation sur sa page github .

2
Sithu

Le générateur de table CLIFramework vous aide à effectuer le travail très facilement et prend en charge l'alignement du texte, la couleur du texte, la couleur de fond, l'habillage du texte, la gestion du débordement de texte, etc.

Voici le tutoriel: https://github.com/c9s/CLIFramework/wiki/Using-Table-Component

Exemple de code: 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

Trop vieux, mais je suis allé dans le même sens maintenant et utilisé str_pad, il suffit de définir la longueur en tant que la taille de votre colonne et thats it

cordialement.

1
Erwin

Juste au cas où quelqu'un voudrait faire cela dans PHP j'ai posté un Gist sur Github

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

appelez simplement:

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

vous devrez peut-être adapter le code si vous utilisez une version php antérieure à 7.2

après cet appel, echo ou writeLine en fonction de votre environnement.

0
redestructa