如何在PHP与HTML中按字符|对齐SQL查询的结构化数据
实现SQL查询结果按|竖线对齐展示的PHP方案
核心思路
要实现规整的竖线对齐,不能直接查询后立即拼接输出,需要先统计每一列的最大字符宽度,再将每个字段填充到对应宽度后拼接成统一格式。
具体实现代码
<?php // 数据库连接配置 $host = 'localhost'; $user = 'your_username'; $password = 'your_password'; $dbname = 'your_database'; // 建立mysqli连接 $conn = new mysqli($host, $user, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 查询USERTOMOVIE表数据,先获取表头和所有数据 $sql = "SELECT * FROM USERTOMOVIE"; $result = $conn->query($sql); if (!$result) { die("查询失败: " . $conn->error); } // 收集所有行数据(包括表头) $rows = []; // 获取表头 $headers = []; for ($i = 0; $i < $result->field_count; $i++) { $field = $result->fetch_field(); $headers[] = $field->name; } $rows[] = $headers; // 获取所有数据行 while ($row = $result->fetch_assoc()) { $rows[] = array_values($row); } // 计算每一列的最大宽度(兼容中文等多字节字符) $columnWidths = []; foreach ($rows as $row) { foreach ($row as $index => $value) { $length = mb_strlen($value, 'UTF-8'); if (!isset($columnWidths[$index]) || $length > $columnWidths[$index]) { $columnWidths[$index] = $length; } } } // 格式化输出每一行 foreach ($rows as $row) { $formattedFields = []; foreach ($row as $index => $value) { // 左对齐填充空格到对应列宽,需右对齐可改为STR_PAD_LEFT $formattedFields[] = str_pad($value, $columnWidths[$index], ' ', STR_PAD_RIGHT); } echo implode(' | ', $formattedFields) . PHP_EOL; // 表头下方添加分隔线(可选,增强可读性) if ($row === $headers) { $separator = []; foreach ($columnWidths as $width) { $separator[] = str_repeat('-', $width); } echo implode('-|-', $separator) . PHP_EOL; } } // 关闭连接 $conn->close(); ?>
关键细节说明
- 多字节字符兼容:用
mb_strlen替代strlen,避免中文、emoji等多字节字符的长度计算偏差。 - 对齐方式调整:通过
STR_PAD_RIGHT/STR_PAD_LEFT可灵活切换字段的左/右对齐方式。 - 分隔线可选:表头下方的分隔线能让输出结构更清晰,不需要可直接删除对应代码段。
内容的提问来源于stack exchange,提问作者bchennnn
相关产品推荐
相关产品推荐

