У меня есть некоторые данные вроде:
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? Я бы хотел избежать использования библиотеки для такой простой задачи.
использовать printf
$i=0; foreach( $itemlist as $items) { foreach ($items as $key => $value) { if ($i++==0) // print header { printf("[%010s]|", $key ); } printf("[%010s]|", $value); } echo "\n"; // don't forget the newline at the end of the row! }
Это использует 10 пробелов. Как говорит BoltClock, вы, вероятно, захотите сначала проверить длину самой длинной строки, или ваша таблица будет разбита на длинные строки.
Другая библиотека с автоматической шириной столбцов.
<?php $renderer = new ArrayToTextTable($array); echo $renderer->getTable();
В дополнение к Byron Whitlock: вы можете использовать usort () с обратным вызовом для сортировки по самому длинному значению массива. Пример:
function lengthSort($a, $b){ $a = strlen($a); $b = strlen($b); if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; }
Я знаю, что этот вопрос очень старый, но он появляется в моем поиске в Google и, возможно, помогает кому-то.
Есть еще один вопрос Stackoverflow с хорошими ответами, особенно этот, который указывает на модуль Zend Framework под названием Zend / Text / Table .
Надеюсь, это поможет.
Zend \ Text \ Table – это компонент для создания текстовых таблиц «на лету» с различными декораторами. Это может быть полезно, если вы хотите отправить структурированные данные в текстовые сообщения, которые используются для шрифтов с одним интервалом, или для отображения информации таблицы в приложении CLI. Zend \ Text \ Table поддерживает многострочные столбцы, colspan и выравнивание.
$table = new Zend\Text\Table\Table(array('columnWidths' => array(10, 20))); // Either simple $table->appendRow(array('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 │ └──────────┴────────────────────┘
Существует еще один рецепт: http://jkeks.com/archives/53
Для удобства просмотра таблицы текстовых таблиц конвертируются (\ t)