用于PHP绘制的SQL值的html表格单元格条件格式的方法

时间:2017-08-16 18:57:53

标签: php

我有一个充满百分比的表,我的值是从SQL数据库中提取的。我想根据从SQL中提取的值更改css元素(bg颜色,颜色等)。例如。 0-10%=红色,20-20%=橙色等我看到这个Changing colour of text in table cell with php and js但我认为我插入的%会阻止它工作。这是我的表格代码,我还没有其他代码。

<tr>
<th>Jan</th>
<th>Feb</th> 
<th>Mar</th>
<th>Apr</th>
<th>May</th> 
<th>Jun</th>
<th>Jul</th>
<th>Aug</th> 
<th>Sep</th>
<th>Oct</th>
<th>Nov</th> 
<th>Dec</th>
</tr>
<tr>
<td class="rating"><?php echo $wor['rjan'];?>%</td>
<td><?php echo $wor['rfeb'];?>%/td>
<td><?php echo $wor['rmar'];?>%</td>
<td><?php echo $wor['rapr'];?>%</td>
<td><?php echo $wor['rjun'];?>%</td>
<td><?php echo $wor['rjul'];?>%</td>
<td><?php echo $wor['raug'];?>%</td>
<td><?php echo $wor['rsep'];?>%</td>
<td><?php echo $wor['roct'];?>%</td>
<td><?php echo $wor['rnov'];?>%</td>
<td><?php echo $wor['rdec'];?>%</td>
</tr>

而不是一个特定问题的解决方案我要求建议一个方法。我想这样做的一种方法是为每个sql字段设置一个长的php ifelse语句来改变类的类型每个细胞。然而,这需要将声明写出12次,这似乎还有很长的路要走。

5 个答案:

答案 0 :(得分:1)

创建一个PHP函数,它接受百分比作为参数,通过几个if语句并返回所需的颜色。

该功能可能如下所示:

function get_color($num_str) {
    $num = intval($num_str);

    if ($num < 10) return 'red';
    if ($num < 20) return 'orange';
    // ...
}

然后使用此功能:

<td class="<?php get_color($wor['rfeb']); ?>">
    <?php echo $wor['rfeb']; ?>%
</td>

答案 1 :(得分:1)

你总是可以创建一个功能来完成它。 (还有&lt;在rfeb行的关闭td上缺失。)

对于html,请创建每一行(此处也可以使用明显的css类):

<td style="backbround-color: <?= color($wor['rmar']) ?>;"><?php echo $wor['rmar'];?>%</td>

向php添加一个函数

<?php
function color($amt) {
    switch (floor($amt/10)) {
        case 0: return 'red';
        case 1: return 'orange';
        // ...
        default: return 'transparent';
    }
}

答案 2 :(得分:0)

您只需要写出12次,因为您每个月都会明确回显<td>。如果将它放入循环中,则可以为格式化编写一次的逻辑。

其他答案建议创建一个函数来确定您将使用的格式可以与此结合使用。 (把这个逻辑放到一个函数中对我来说似乎是一个好主意,但你仍然需要调用该函数12次。)

我建议让该函数返回预定义的名称(由您或某些CSS框架,例如bootstrap等),您可以应用于单元格的CSS类,而不是使用它来明确设置背景颜色等。以内联样式。我只是编造了一个名字(format_percentage_cell),但是无论你想叫什么,你都知道。其他答案对于实施的起点有一些好的想法。

<tr>
<?php foreach ($wor as $month): ?>
    <td class="<?= format_percentage_cell($month) ?>"><?= $month ?>%</td>
<?php endforeach ?>
</tr>

答案 3 :(得分:0)

首先,您不必使用这么多if-elseswitch-case块来获得正确的百分比范围和相应的颜色。使用这样一个简单的函数:

function getColor($percentage){ 
    $perArray = array(10 => 'red', 20 => 'orange', 30 => 'green', ...);
    if ($percentage % 10)
        $percentage = $percentage + (10 - $percentage % 10);
    return $perArray[$percentage];
}

在上面的函数中,$perArray数组将被解释为:

  • 10 => 'red'表示0-10的百分比值将被指定为红色
  • 20 => 'orange'表示11-20的百分比值将被指定为橙色
  • 30 => 'green'表示21-30的百分比值将被指定为绿色

这就是你应该为每个表行调用getColor()函数的方法:

<tr>
    <th>Jan</th>
    ...
    <th>Dec</th>
</tr>
<tr>
    <td style="color:<?php echo getColor($wor['rjan']); ?>;"><?php echo $wor['rjan'];?>%</td>
    <td style="color:<?php echo getColor($wor['rfeb']); ?>;"><?php echo $wor['rfeb'];?>%</td>
    ...
    <td style="color:<?php echo getColor($wor['rdec']); ?>;"><?php echo $wor['rdec'];?>%</td>
</tr>

答案 4 :(得分:0)

由于你只想要消化,我会做以下事情:

您只需计算字节数。 255是每个的最大值(总共3个,不包括Alpha通道)颜色范围,这将是您百分比的100%。如果您使用tr函数向rgb()元素添加样式属性,则可以轻松应用此功能。

因此,如果您想要红色(低限)到绿色(高限),您只需执行以下操作:

function yourfunction($percentage){
  return 'rgb('. round((255 / 100) * $percentage) .', '. round((255 / 100) * (100 - $percentage)).', 0)';
}

因此请将功能调整为您喜欢的颜色,例如红色到绿色,然后直接将值打印到<tr style="color: <?= yourfunction($percentage)?>" >value</tr>