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

如何基于PHP+MySQL实现按单元格值修改HTML表格背景色?

问题描述

从MySQL数据库获取数据并展示在HTML表格中,需通过PHP根据单元格的值修改背景色。曾参考逐列判断的方案,但表格有32列(Dep 1至Dep 32),无法逐列处理。尝试用in_array函数实现但未成功,现有代码如下:

<?php
if (mysqli_num_rows($result) > 0) {
  $sn=1;
  while($data = mysqli_fetch_assoc($result)) {
//$color = $data['s'] == "Single Needle" ? "red" : ($data['s'] == "Double Needle" ? "yellow" : "green"); 
if (in_array("Cotton", $data))
{
$color="red";
}
else if (in_array("Denim", $data))
{
  $color="green";
}
else if (in_array("Linen", $data))
{
  $color="yellow";
}
 ?>

 <tr >
<td <?php echo' style="background-color:'.$color.'" '
 ?> ><?php echo $data['s']; ?> </td>

<td <?php echo' style="background-color:'.$color.'" '
 ?> ><?php echo $data['d']; ?> </td>

   <td><?php echo $data['Dep 1']; ?> </td>
   <td><?php echo $data['Dep 2']; ?> </td>
   <td><?php echo $data['Dep 3']; ?> </td>
   <td><?php echo $data['Dep 4']; ?> </td>
   <td><?php echo $data['Dep 5']; ?> </td>
   <td><?php echo $data['Dep 6']; ?> </td>
   <td><?php echo $data['Dep 7']; ?> </td>

 <tr>
 <?php
  $sn++;}} else { ?>
    <tr>
     <td colspan="8">No data found</td>
    </tr>
 <?php } ?>
  </table>
解决方案

你的问题在于用in_array判断整行数据,导致整行共用同一个颜色,而实际需要每个单元格根据自身值单独设置颜色。可以通过以下方式优化:

  1. 定义颜色映射表:把值与对应颜色存入数组,方便维护和扩展。
  2. 循环处理Dep列:不用手动编写32列代码,用循环自动生成Dep 1到Dep 32的单元格。
  3. 单个单元格判断颜色:每个单元格根据自身值从映射表获取对应颜色,无匹配值则使用默认样式。

修改后的代码:

<?php
// 定义值与颜色的映射关系,后续新增或修改只需调整此数组
$colorMap = [
    'Cotton' => 'red',
    'Denim' => 'green',
    'Linen' => 'yellow'
];

if (mysqli_num_rows($result) > 0) {
    $sn = 1;
    while($data = mysqli_fetch_assoc($result)) {
?>
<tr>
    <!-- 处理固定列s -->
    <td style="background-color: <?php echo isset($colorMap[$data['s']]) ? $colorMap[$data['s']] : ''; ?>">
        <?php echo $data['s']; ?>
    </td>
    <!-- 处理固定列d -->
    <td style="background-color: <?php echo isset($colorMap[$data['d']]) ? $colorMap[$data['d']] : ''; ?>">
        <?php echo $data['d']; ?>
    </td>
    <!-- 循环生成Dep 1到Dep 32的单元格 -->
    <?php for ($i = 1; $i <= 32; $i++) { 
        $depKey = "Dep $i";
        $cellValue = $data[$depKey];
        // 根据当前单元格的值获取对应颜色,无匹配则为空
        $cellColor = isset($colorMap[$cellValue]) ? $colorMap[$cellValue] : '';
    ?>
    <td style="background-color: <?php echo $cellColor; ?>">
        <?php echo $cellValue; ?>
    </td>
    <?php } ?>
</tr>
<?php
        $sn++;
    }
} else { ?>
<tr>
    <td colspan="<?php echo 2 + 32; ?>">No data found</td>
</tr>
<?php } ?>
</table>

代码说明

  • $colorMap:集中管理值与颜色的对应关系,后续调整颜色或新增值只需修改这个数组。
  • 固定列s和d:单独判断各自的值,从映射表获取对应颜色。
  • 循环生成Dep列:通过for循环遍历1到32,自动生成所有Dep列的单元格,每个单元格独立设置背景色。
  • 空值兼容:如果单元格的值不在映射表中,背景色为空,将使用表格默认样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:07:13