Если я сделаю выбор в клиенте MySQL, у меня появится вывод, который выглядит следующим образом:
mysql> select * FROM `group` LIMIT 2; +----------+---------------------+-----------------+-------------+ | group_id | group_supergroup_id | group_deletable | group_label | +----------+---------------------+-----------------+-------------+ | 1 | 4 | 0 | defaut | | 8 | 1 | 1 | dbdfg | +----------+---------------------+-----------------+-------------+
Как можно преобразовать массив fetch
PDO (или fetchAll
) в таблицу?
Вот пример использования кода:
$prep = $pdo->query('SELECT * FROM `group` LIMIT 2;'); $arr = $prep->fetchAll(PDO::FETCH_ASSOC); echo renderMySQLTable($arr);
Что-то близко к тому, что выводит клиент mysql :
$data = array( array( 'group_id' => '1', 'group_supergroup_id' => '4', 'group_deletable' => '0', 'group_label' => 'default', ), array( 'group_id' => '8', 'group_supergroup_id' => '1', 'group_deletable' => '1', 'group_label' => 'dbdfg', ), ); if ( empty($data) ) { echo "Empty set"; } else { // determine widths of titles $colWidths = array(); foreach ( $data[0] as $title => $value ) { $colWidths[$title] = strlen($title); } // determine widths of columns foreach ( $data as $row ) { foreach ( $row as $title => $value ) { if ( is_null($value) ) { $value = 'NULL'; } if ( $colWidths[$title] < strlen($value) ) { $colWidths[$title] = strlen($value); } } } // generate horizontal border $horizontalBorder = '+'; foreach ( $colWidths as $title => $width ) { $horizontalBorder .= str_repeat('-', $width + 2) . "+"; } $horizontalBorder .= "\n"; // print titles echo $horizontalBorder; echo '|'; foreach ( $data[0] as $title => $value ) { printf(" %-{$colWidths[$title]}s |", $title); } echo "\n"; echo $horizontalBorder; // print contents foreach ( $data as $row ) { echo "|"; foreach ( $row as $title => $value ) { if ( is_null($value) ) { $value = 'NULL'; } printf(" %-{$colWidths[$title]}s |", $value); } echo "\n"; } echo $horizontalBorder; }
не-pdo aproach, хотя 🙂
function renderMySQLTable($query) { echo `mysql -H -e"$query"`; }
для массива это не так сложно. несколько циклов, и у вас есть необходимость. начните с выполнения print_r($arr)
чтобы увидеть его структуру
используйте таблицу и дайте немного стиля в css.
echo "<table class='datasheet'>"; foreach($arr as $a) { echo "<tr>"; foreach($a as $v) { echo "<td>$v</td>"; } echo "</tr>"; } echo "</table>";