Как вывести простую таблицу ascii в PHP? - PullRequest
4 голосов
/ 22 февраля 2011

У меня есть некоторые данные, такие как:

Array
(
    [0] => Array
        (
            [a] => largeeeerrrrr
            [b] => 0
            [c] => 47
            [d] => 0
        )

    [1] => Array
        (
            [a] => bla
            [b] => 1
            [c] => 0
            [d] => 0
        )

    [2] => Array
        (
            [a] => bla3
            [b] => 0
            [c] => 0
            [d] => 0
        )

)

И я хочу произвести вывод как:

title1        | title2 | title3 | title4
largeeeerrrrr | 0      | 47     | 0
bla           | 1      | 0      | 0
bla3          | 0      | 0      | 0

Какой самый простой способ добиться этого в PHP? Я бы хотел избежать использования библиотеки для такой простой задачи.

Ответы [ 5 ]

9 голосов
/ 22 февраля 2011

использование printf

$i=0;
foreach( $itemlist as $items)
{
 foreach ($items as $key => $value)
 {
   if ($i++==0) // print header
   {
     printf("[%010s]|",   $key );
     echo "\n";
   }
   printf("[%010s]|",   $value);
 }
 echo "\n"; // don't forget the newline at the end of the row!
}

Это использует 10 пробелов. Как говорит BoltClock, вы, возможно, захотите сначала проверить длину самой длинной строки, иначе ваш стол будет натянут на длинные строки.

4 голосов
/ 13 июля 2015

Другая библиотека с автоматической шириной столбца.

 <?php
 $renderer = new ArrayToTextTable($array);
 echo $renderer->getTable();
3 голосов
/ 23 января 2015

Я знаю, что этот вопрос очень старый, но он появляется в моем поиске в Google и, возможно, он кому-то помогает.

Есть еще один вопрос Stackoverflow с хорошими ответами, особенно этот, который указывает на модуль Zend Framework с именем Zend / Text / Table .

Надеюсь, что это поможет.


Введение в документы

Zend\Text\Table - это компонент для создания текстовых таблиц на лету с использованием декораторов.Это может быть полезно для отправки структурированных данных в текстовых электронных письмах или для отображения информации о таблице в приложении CLI.Zend\Text\Table поддерживает многострочные столбцы, интервалы столбцов и выравнивание.


Основное использование

$table = new Zend\Text\Table\Table(['columnWidths' => [10, 20]]);

// Either simple
$table->appendRow(['Zend', 'Framework']);

// Or verbose
$row = new Zend\Text\Table\Row();

$row->appendColumn(new Zend\Text\Table\Column('Zend'));
$row->appendColumn(new Zend\Text\Table\Column('Framework'));

$table->appendRow($row);

echo $table;
Вывод
┌──────────┬────────────────────┐
│Zend      │Framework           │
|──────────|────────────────────|
│Zend      │Framework           │
└──────────┴────────────────────┘
1 голос
/ 17 мая 2016

Существует еще один рецепт: http://jkeks.com/archives/53

Есть конвертированная текстовая таблица с вкладками (\ t) для улучшения вида

1 голос
/ 22 февраля 2011

В дополнение к Байрону Уитлоку: вы можете использовать usort () с обратным вызовом для сортировки по наибольшему значению массива.Пример:

function lengthSort($a, $b){
    $a = strlen($a);
    $b = strlen($b);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
...