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