You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:53:14