PHP查询结果嵌套列转换:行转列结构实现求助
解决方案
1. 先明确数据结构与目标格式
假设你的查询结果是如下结构的二维数组(如果是其他结构,只需稍作调整):
$rawData = [ ['Parcelas' => 2, 'A' => 65.99, 'D' => 47.99], ['Parcelas' => 3, 'A' => 66.19, 'D' => 48.19], ['Parcelas' => 4, 'A' => 66.39, 'D' => 48.39], ['Parcelas' => 5, 'A' => 66.59, 'D' => 48.59], // 更多数据... ];
目标是输出对齐的管道分隔表格,核心是固定列宽+内容填充对齐,同时解决你之前判断存在性追加失败的问题。
2. 完整实现代码
// 1. 处理数据去重(按Parcelas字段去重,避免重复行) $uniqueData = []; foreach ($rawData as $row) { $parcelas = $row['Parcelas']; // 仅当该Parcelas值未存在时,添加到数组 if (!isset($uniqueData[$parcelas])) { $uniqueData[$parcelas] = $row; } } // 转换为索引数组,方便后续遍历 $uniqueData = array_values($uniqueData); // 2. 定义列配置:字段名 => 列宽度(保证输出对齐) $columnConfig = [ 'Parcelas' => 8, 'A' => 6, 'D' => 6, ]; // 3. 输出表头 $headerLine = []; foreach ($columnConfig as $field => $width) { // 右填充空格,确保列宽一致 $headerLine[] = str_pad($field, $width, ' ', STR_PAD_RIGHT); } echo implode(' | ', $headerLine) . " |\n"; // 4. 输出数据行 foreach ($uniqueData as $row) { $dataLine = []; foreach ($columnConfig as $field => $width) { // 格式化数值为两位小数,再填充空格对齐 $value = isset($row[$field]) ? number_format($row[$field], 2) : ''; $dataLine[] = str_pad($value, $width, ' ', STR_PAD_RIGHT); } echo implode(' | ', $dataLine) . " |\n"; }
3. 关键说明
- 数据去重逻辑:用
Parcelas作为数组键,判断是否已存在,避免重复添加,解决你之前遍历追加失败的问题; - 对齐处理:通过
str_pad固定每列宽度,number_format统一数值格式,确保输出的表格和示例完全对齐; - 灵活性:如果你的查询结果字段名不同,只需修改
$columnConfig中的键名;如果是索引数组,把$row['Parcelas']改成$row[0]这类索引即可。
内容的提问来源于stack exchange,提问作者Carlos Alberto Junior
相关产品推荐
相关产品推荐

