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

基于数组数据按当前时间填充HTML表格列的问题修正

问题:PHP数组生成时段统计表格修正

我来帮你搞定这个表格生成的问题!你需要根据当前时间把数组中的count值填充到对应时段列,同时按经销商分组展示状态数据,下面是修正后的方案:

问题回顾

原始数据数组

$dealerCount = [
    [
        'dealer_id' => 5924,
        'DealerName' => 'I Speed Motors',
        'mmv_id' => 1,
        'model_decision' => 'Straight Through',
        'CCStatus' => 'CC Pending',
        'created_at' => '2020-10-09 10:04:36',
        'count' => 2
    ],
    [
        'dealer_id' => 7942,
        'DealerName' => 'Suriya Motors LLP',
        'mmv_id' => 1,
        'model_decision' => 'Referred to Credit',
        'CCStatus' => 'CC Approved',
        'created_at' => '2020-10-09 11:39:34',
        'count' => 1
    ],
    [
        'dealer_id' => 7942,
        'DealerName' => 'Suriya Motors LLP',
        'mmv_id' => 1,
        'model_decision' => 'Form Received at Chola',
        'CCStatus' => 'CC Rejected',
        'created_at' => '2020-10-09 10:04:23',
        'count' => 1
    ]
];

错误输出表格

Dealer NameStatus11.00am1.00pm3.00pm5.00pm7.00pm9.00pm
Suriya Motors LLPCC Pending
CC Rejected
CC Expired
Referred to Credit1
I Speed MotorsCC Pending2
CC Rejected
CC Expired
Suriya Motors LLPCC Pending
CC Rejected1
CC Expired

期望输出表格(当前时间3.00pm)

Dealer NameStatus11.00am1.00pm3.00pm5.00pm7.00pm9.00pm
Suriya Motors LLPCC Pending
CC Rejected1
CC Expired
Referred to Credit1
I Speed MotorsCC Pending2
CC Rejected
CC Expired

修正后的PHP代码

<?php
// 定义时段列表,对应表格列的顺序
$timeSlots = ['11.00am', '1.00pm', '3.00pm', '5.00pm', '7.00pm', '9.00pm'];
// 当前时间对应的时段(这里模拟为3.00pm,可替换为动态获取的当前时段)
$currentTimeSlot = '3.00pm';
// 获取当前时段在列表中的索引,用于填充对应列
$slotIndex = array_search($currentTimeSlot, $timeSlots);

// 先按经销商分组整理数据,避免重复输出经销商行
$groupedDealers = [];
foreach ($dealerCount as $item) {
    $dealerName = $item['DealerName'];
    if (!isset($groupedDealers[$dealerName])) {
        // 初始化每个经销商的状态数据
        $groupedDealers[$dealerName] = [
            'CC Pending' => '',
            'CC Rejected' => '',
            'CC Expired' => '',
            'model_decision' => '',
            'model_decision_count' => ''
        ];
    }
    // 根据状态赋值到对应字段
    switch ($item['CCStatus']) {
        case 'CC Approved':
            $groupedDealers[$dealerName]['model_decision'] = $item['model_decision'];
            $groupedDealers[$dealerName]['model_decision_count'] = $item['count'];
            break;
        case 'CC Pending':
            $groupedDealers[$dealerName]['CC Pending'] = $item['count'];
            break;
        case 'CC Rejected':
            $groupedDealers[$dealerName]['CC Rejected'] = $item['count'];
            break;
        case 'CC Expired':
            $groupedDealers[$dealerName]['CC Expired'] = $item['count'];
            break;
    }
}

// 构建HTML表格
$body = "<html> <head> <style> table, th, td { border: 1px solid black; border-collapse: collapse; text-align: center; } </style> </head> <body> <table> <tr> <th>Dealer Name</th><th>Status</th><th>11.00am</th><th>1.00pm</th><th>3.00pm</th><th>5.00pm</th><th>7.00pm</th><th>9.00pm</th> </tr>";

foreach ($groupedDealers as $dealerName => $statusData) {
    // 生成每行的时段列内容,默认空,只在当前时段填充值
    $getSlotColumns = function($count) use ($slotIndex) {
        $columns = array_fill(0, 6, '');
        if ($count !== '') {
            $columns[$slotIndex] = $count;
        }
        return implode('</td><td>', $columns);
    };

    // 第一行:经销商名称+CC Pending
    $body .= "<tr> <td rowspan='4'>$dealerName</td><td>CC Pending</td><td>{$getSlotColumns($statusData['CC Pending'])}</td> </tr>";
    // 第二行:CC Rejected
    $body .= "<tr> <td>CC Rejected</td><td>{$getSlotColumns($statusData['CC Rejected'])}</td> </tr>";
    // 第三行:CC Expired
    $body .= "<tr> <td>CC Expired</td><td>{$getSlotColumns($statusData['CC Expired'])}</td> </tr>";
    // 第四行:model_decision状态
    $body .= "<tr> <td>{$statusData['model_decision']}</td><td>{$getSlotColumns($statusData['model_decision_count'])}</td> </tr>";
}

$body .= "</table></body></html>";

echo $body;
?>

关键修正点

  1. 按经销商分组:先把原始数据按经销商名称分组,避免重复输出同一个经销商的多行表头,解决了错误输出中重复出现经销商的问题。
  2. 动态匹配时段列:通过$timeSlots数组和$slotIndex,自动把count值填充到当前时间对应的列,不管当前时段是哪个,都能正确映射。
  3. 统一生成时段列:用匿名函数getSlotColumns统一处理每行的时段列内容,确保只有当前时段列填充值,其他列为空。
  4. 正确使用rowspan:每个经销商只输出一次rowspan='4'的单元格,后续行不再重复输出经销商名称,符合表格格式要求。

内容的提问来源于stack exchange,提问作者kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:03:15