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

PHP实现表格按tagid分组交替着色问题求助

表格行按tagid分组交替着色问题

需求:表格行按tagid分组着色,同一tagid的所有行使用同一种颜色,不同tagid分组交替使用table-danger(红色)和table-warning(黄色)循环。

当前问题:现有代码仅每个tagid分组的首行显示红色,分组内后续行显示黄色,不符合同组同色的要求。

现有代码

$groupid = null;
$output = '<table class="table">';

foreach($data as $key => $var)
{
  echo $var['tagid'];

  if($var['tagid'] != $groupid)
  {
    $output .= '<tr class=table-danger>';

    foreach($var as $k => $v)
    {
      $output .= '<td style="5%">' . $v . '</td>';
    }
  }
  else
  {
    $output .= '<tr class=table-warning>';

    foreach($var as $k => $v)
    {
      $output .= '<td style="5%">' . $v . '</td>';
    }
  }

  $groupid = $var['tagid'];
}

示例数组

array(42) 
{ [0]=> array(16) { ["tagid"]=> string(38) "S_04CF22A8-31B4-4581-BC57-A3BD288D25C7" ["tagtime"]=> string(19) "2022-10-19 20:18:18" ["lat"]=> string(11) "52.10000000" ["long"]=> string(11) "-3.20000000" ["moonRise"]=> string(9) "Not Today" ["moonSet"]=> string(19) "2022-10-19 15:41:54" ["moonPhase"]=> float(0.814284) ["windDirection"]=> string(7) "100°" ["windSpeed"]=> string(7) "13.1mph" ["temp"]=> string(10) "11.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" } 
[1]=> array(16) { ["tagid"]=> string(38) "S_04CF22A8-31B4-4581-BC57-A3BD288D25C7" ["tagtime"]=> string(19) "2022-10-19 20:18:42" ["lat"]=> string(11) "52.10000000" ["long"]=> string(11) "-3.20000000" ["moonRise"]=> string(9) "Not Today" ["moonSet"]=> string(19) "2022-10-19 15:41:54" ["moonPhase"]=> float(0.814292) ["windDirection"]=> string(7) "100°" ["windSpeed"]=> string(7) "13.1mph" ["temp"]=> string(10) "11.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" } 
[2]=> array(16) { ["tagid"]=> string(38) "S_04CF22A8-31B4-4581-BC57-A3BD288D25C7" ["tagtime"]=> string(19) "2022-10-19 20:18:51" ["lat"]=> string(11) "52.10000000" ["long"]=> string(11) "-3.20000000" ["moonRise"]=> string(9) "Not Today" ["moonSet"]=> string(19) "2022-10-19 15:41:54" ["moonPhase"]=> float(0.814295) ["windDirection"]=> string(7) "100°" ["windSpeed"]=> string(7) "13.1mph" ["temp"]=> string(10) "11.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" } 
[3]=> array(16) { ["tagid"]=> string(38) "S_0DB2D804-A2F7-4CDA-B744-C7AD9926E999" ["tagtime"]=> string(19) "2022-10-19 19:47:18" ["lat"]=> string(11) "52.10000000" ["long"]=> string(11) "-3.20000000" ["moonRise"]=> string(9) "Not Today" ["moonSet"]=> string(19) "2022-10-19 15:41:54" ["moonPhase"]=> float(0.81363) ["windDirection"]=> string(7) "100°" ["windSpeed"]=> string(7) "13.1mph" ["temp"]=> string(10) "11.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" } 
[4]=> array(16) { ["tagid"]=> string(38) "S_0DB2D804-A2F7-4CDA-B744-C7AD9926E999" ["tagtime"]=> string(19) "2022-10-19 20:07:46" ["lat"]=> string(11) "52.10000000" ["long"]=> string(11) "-3.20000000" ["moonRise"]=> string(9) "Not Today" ["moonSet"]=> string(19) "2022-10-19 15:41:54" ["moonPhase"]=> float(0.814062) ["windDirection"]=> string(7) "100°" ["windSpeed"]=> string(7) "13.1mph" ["temp"]=> string(10) "11.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" } 
[5]=> array(16) { ["tagid"]=> string(38) "S_0DB2D804-A2F7-4CDA-B744-C7AD9926E999" ["tagtime"]=> string(19) "2022-10-19 20:10:55" ["lat"]=> string(11) "52.10000000" ["long"]=> string(11) "-3.20000000" ["moonRise"]=> string(9) "Not Today" ["moonSet"]=> string(19) "2022-10-19 15:41:54" ["moonPhase"]=> float(0.814128) ["windDirection"]=> string(7) "100°" ["windSpeed"]=> string(7) "13.1mph" ["temp"]=> string(10) "11.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" } 
[6]=> array(16) { ["tagid"]=> string(38) "S_158E8F79-77F0-4485-B0AE-B75635F4EAA2" ["tagtime"]=> string(19) "2022-10-20 14:57:08" ["lat"]=> string(11) "50.45082112" ["long"]=> string(11) "-4.06133970" ["moonRise"]=> string(19) "2022-10-20 00:33:06" ["moonSet"]=> string(19) "2022-10-20 15:56:11" ["moonPhase"]=> float(0.838046) ["windDirection"]=> string(7) "151°" ["windSpeed"]=> string(4) "2mph" ["temp"]=> string(10) "14.85°C" ["weatherCondition"]=> string(6) "Clouds" ["airPressure"]=> float(1011) ["precipitation"]=> string(3) "0mm" }

修正后的代码

// 存储每个tagid对应的颜色
$tagColors = [];
// 交替颜色列表
$colorOptions = ['table-danger', 'table-warning'];
// 当前使用的颜色索引
$currentColorIndex = 0;
$output = '<table class="table">';

foreach($data as $key => $var) {
    $tagId = $var['tagid'];
    
    // 如果当前tagid还未分配颜色,分配当前颜色并切换下一个
    if (!isset($tagColors[$tagId])) {
        $tagColors[$tagId] = $colorOptions[$currentColorIndex];
        // 切换索引,循环使用颜色
        $currentColorIndex = ($currentColorIndex + 1) % count($colorOptions);
    }
    
    // 使用该tagid对应的颜色创建行
    $output .= '<tr class="' . $tagColors[$tagId] . '">';
    foreach($var as $k => $v) {
        $output .= '<td style="width:5%">' . $v . '</td>';
    }
    $output .= '</tr>';
}

$output .= '</table>';

关键逻辑说明

  • $tagColors数组:记录每个tagid对应的固定颜色,确保同一tagid的所有行颜色一致
  • $colorOptions:定义交替使用的颜色列表,可扩展更多颜色
  • $currentColorIndex:控制颜色切换,通过取模运算实现循环交替
  • 补充了原代码中遗漏的</tr>和</table>闭合标签,修复HTML结构错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:44