【问题标题】:Change the color of specific characters of a PHP output更改 PHP 输出的特定字符的颜色
【发布时间】:2017-06-06 00:41:16
【问题描述】:

我有一个 php 查询,它在从数据库中获取数据后显示值。显示的值类似于“T”、“F”或“R”。 echo 命令运行良好。我想在网页中显示特定值时更改它们的颜色。例如,“T”应该是绿色,“F”应该是红色,“R”应该是黄色。我怎样才能做到这一点?

谢谢!

以下是我的代码的一部分。我应该在代码中的哪里插入样式元素?

$sql = "select * from <database table> where attribute1 = '$val1' and attribute2 = '$val2'";        
$fetch = $conn->query($sql);

if ($fetch->num_rows > 0) 
    {
         // output data of each row
     while($row = $fetch->fetch_assoc()) 
        {
           echo
              "<tr>
                  <td>".$row["col1"]."</td>
                  <td>".$row["col2"]."</td>
                  <td>".$row["col3"]."</td>
                  <td>".$row["col4"]."</td>
                  <td>".$row["col5"]."</td>
               </tr>";
        }
     echo "</table>";
  } 
else  {
    echo "0 results";
  }

【问题讨论】:

  • 将样式添加到

标签: php html css mysql


【解决方案1】:

这可以通过内联样式来完成,但这是一种不好的做法。最好将类应用于输出。

例如

<td class="green"></td>
<td class="red"></td>
<td class="yellow"></td>

然后在您的 CSS 文件中,您将拥有相应的 CSS 类。

.green{
  color: #0f0;
}

Read more on the CSS property color on MDN.

编辑:根据 OP 的评论,将我的部分评论添加到答案中。

if($row['col1'] === 'T')
{
  $class = "green";
}

那么在输出&lt;td&gt;&lt;/td&gt;s时,循环:

echo "<td class='$class'></td>";

或者:

echo '<td class="' . $class . '"></td>;

【讨论】:

  • 我认为行内样式在这里不起作用,因为 $row["col1"] 或 $row["col2"] 可以获取三个值中的任何一个(T、F 或 R ) 取决于数据库表中的值。
  • 那么你需要在echoing之前使用条件来检查输出是什么。
  • 这就是我要找的!但我无法弄清楚如何做到这一点。我是 PHP 和 CSS 的新手。如果您能在代码中演示在何处以及如何使用该条件检查,我将不胜感激。谢谢!
  • 例如if ($row['col1'] === 'T') { $class = "green"; } 然后稍后循环:echo '&lt;td class="' . $class . '"&gt;&lt;/td&gt;'; 还有一种方法可以输出变量的内容而不必连接字符串,但是我忘记了它是单引号还是双引号。 php 类似于:echo "&lt;td class='$class'&gt;&lt;/td&gt;";。但同样,我不知道它是单引号还是双引号。谷歌会回答这个问题。
【解决方案2】:

自己创建一个函数,该函数接受一个值并以适当的样式输出&lt;td&gt;。我在这里使用内联样式,但您可以改用 CSS 类:

function color($value) {
    static $map = [ 'T' => 'green', 'F' => 'red', 'R' => 'yellow' ];
    return sprintf(
        '<td style="color:%s">%s</td>',
        array_key_exists($value, $map) ? $map[$value] : 'black',
        $value
    );
}

现在,与其直接回显单元格数据,不如将其包装在对该函数的调用中,例如:

 while($row = $fetch->fetch_assoc()) 
    {
       echo
          "<tr>".
              color($row["col1"]).
              color($row["col2"]).
              color($row["col3"]).
              color($row["col4"]).
              color($row["col5"]).
           </tr>";
    }

将逻辑保留在函数中可以让您稍后更改逻辑而不会影响调用者。

【讨论】:

    【解决方案3】:

    如果数据库表中的col1 在每一行上分别有这些单个值TFR,请考虑以下代码:

    <?php
    
        $color_codes = array(
            'T' => 'green',
            'F' => 'red',
            'R' => 'yellow'
        );
    
        $sql = "select * from <database table> where attribute1 = '$val1' and attribute2 = '$val2'";        
        $fetch = $conn->query($sql);
    
        if ($fetch->num_rows > 0) {
            // output data of each row
            while($row = $fetch->fetch_assoc()) {
                echo "<tr>
                        <td style='color: " . $color_codes[$row['col1']] . "'>" . $row["col1"] . "</td>
                        <td>" . $row["col2"] . "</td>
                        <td>" . $row["col3"] . "</td>
                        <td>" . $row["col4"] . "</td>
                        <td>" . $row["col5"] . "</td>
                    </tr>";
            }
            echo "</table>";
        }
        else {
            echo "0 results";
        }
    
    ?>
    

    <style>
        .red {
            color: red;
        }
    
        .green {
            color: green;
        }
    
        .yellow {
            color: yellow;
        }
    </style>
    
    <?php
    
        $color_codes = array(
            'T' => 'green',
            'F' => 'red',
            'R' => 'yellow'
        );
    
        $sql = "select * from <database table> where attribute1 = '$val1' and attribute2 = '$val2'";        
        $fetch = $conn->query($sql);
    
        if ($fetch->num_rows > 0) {
            // output data of each row
            while($row = $fetch->fetch_assoc()) {
                echo "<tr>
                        <td class='" . $color_codes[$row['col1']] . "'>" . $row["col1"] . "</td>
                        <td>" . $row["col2"] . "</td>
                        <td>" . $row["col3"] . "</td>
                        <td>" . $row["col4"] . "</td>
                        <td>" . $row["col5"] . "</td>
                    </tr>";
            }
            echo "</table>";
        }
        else {
            echo "0 results";
        }
    
    ?>
    

    第二个代码的唯一区别是添加了class 属性并删除了style 属性以定义样式表中每种颜色的CSS 规则。两种代码都有效。

    您可以坚持使用自己熟悉的代码。但是第一个比较灵活,因为您不需要在样式表中为每种颜色添加 CSS 规则。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2016-02-25
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多