【问题标题】:PHP: Change color of text based on $valuePHP:根据 $value 更改文本的颜色
【发布时间】:2011-02-17 18:02:47
【问题描述】:

根据变量更改文本颜色的最简单方法是什么?

例如:如果 $var 介于 1-5 之间,则为绿色。 6-10 之间,橙色。大于 11,红色。

【问题讨论】:

  • 有趣的是,当答案如此相似时!我刚刚注意到我的和 sshow 的(除了功能部分和橙色十六进制)完全相同:)
  • @Kevin,这个问题变成了一场噩梦。我正在对所有不符合您的规则的人投反对票,但在一天结束时,您应该编辑您的问题或承认大多数答案都是错误的——包括绿色勾号的答案。只是为了让您(和其他人)理解“大于 11”与“大于或等于 11”不同。由于其他明显的原因,一些答案是错误的。但是,嘿,这是一个公共问答网站,我们应该期待这种行为。
  • @Zaf,我意识到从技术上讲,他们错了,因为 >= 11。但事实仍然是他们回答了我的问题(这是以“?”结尾的行)。我的例子只是为了提供更多细节并促进适用于我情况的答案。 sshow 回答得很好,你只是嫉妒。
  • @Kevin 一点也不嫉妒 sshow,如果我是他,我会改变他的答案,否则这不是一个很好的记录。我嫉妒你的金徽章;)
  • 我愿意用我的金徽章换取你的知识! :)

标签: php colors


【解决方案1】:
function getProperColor($number)
{
    if ($var > 0 && $var <= 5)
        return '#00FF00';
    else if ($var >= 6 && $var <= 10)
        return = '#FF8000';
    else if ($var >= 11)
        return = '#FF0000';
}

并像这样使用它

<div style="background-color: <?=getProperColor($result['number'])?>;"><?=$result["title"]?></div>

【讨论】:

  • 对于这样的简单操作来说,函数是否矫枉过正?
  • 如果您像往常一样为函数保留一个外部文件,我会说这是一种更易读的方式。
  • 就清晰度和组织而言,函数可能是您的最佳选择。
  • 你是对的。我传递了几个变量,这个函数绝对是解决方案!
  • 难以置信 - 错误的答案会得到绿色勾号!此答案已被编辑,仍然不符合 OP 规则。
【解决方案2】:
$color = "#000000";

if (($v >= 1) && ($v <= 5))
   $color = "#00FF00";
else if (($v >= 6) && ($v <= 10))
   $color = "#FF9900";
else if ($v >= 11)
   $color = "#FF0000";

echo "<span style=\"color: $color\">Text</span>";

【讨论】:

  • 您在第二个 if 块中在 $v$var 之间切换。 ;)
  • +1 这可能是最好的解决方案,并且没有任何“开放式”评估(例如在我的评估中,它很乐意取小于 1 的值并仍然使用绿色)。
  • 此答案的“大于或等于 11”为红色。与“大于”不同..
  • 那么 $v 等于 11 的情况是什么?又黑了?
  • @LukeN 我们不知道。 OP 未能澄清当 n=11 时会发生什么。
【解决方案3】:

颜色值是否由常量索引?我会准备哈希图

$colorMap[0] = '#00FF00'; //green
$colorMap[1] = '#0000FF'; //blue
$colorMap[2] = '#FF0000'; //red
$colorMap[3] = '#330000'; //dark red

等等。然后使用 CSS

<span style="color: <?php echo $colorMap[$var]; ?>;">desired color</span>

【讨论】:

    【解决方案4】:

    如果要使用一组 if 语句,则需要实际使用 elseif 语句,

     if ($var < 6) $color = '#00FF00';
    elseif ($var < 10) $color = '#FF8000';
    elseif ($var > 10) $color = '#FF0000';
    

    【讨论】:

    • 如果 $var == 10 这不会设置 $color,虽然你是对的,但正如我的回答一样,elseif 比 if 的三个更好。
    【解决方案5】:

    我将使用 CSS 颜色,并强调数字 11 不会根据您的规则映射到任何颜色,这使得大多数答案无效:)

    <?php
    
    $color=getColor(11);
    
    function getColor($n){
    
        // Is number between 1 and 5?
        if($n>=1 && $n<=5) return "green";
    
        // Is number between 6 and 10?
        if($n>=6 && $n<=10) return "orange";
    
        // Is number greater than 11
        if($n>11) return "red";
    
        // Return default (black) for all other numbers
        return "black";
    
    }
    
    ?>
    
    <span style='color:<?=$color?>'>Text</span>
    

    【讨论】:

      【解决方案6】:

      类似于这三个 if 语句:

      if ($var < 10) $color = '#FF8000';
      if ($var < 6) $color = '#00FF00';
      if ($var >= 10) $color = '#FF0000';
      
      echo "<span style=\"color: $color;\">This text is colored.</span>";
      

      【讨论】:

      • 要小心——在这个特定的例子中,从 0 到 5 的任何值(嗯,从技术上讲,-infinity 到 5,但你明白了)将始终被分配 '#FF8000' (我没有' t相信是正确的)。
      • 任何小于 5 的东西都不起作用,因为它会被覆盖,因为小于 5 的东西都会小于 10。可以使用 elseif 来摆脱这种情况
      • 我的原始答案是 if 语句的顺序会导致问题,其中
      【解决方案7】:

      一个简单的解决方案可能是做这样的事情......

      if ($var < 6)
          $style="0F0";
      else if ($var < 11)
          $style="F50";
      else
         $style = "F00";
      
      ?><div style="color:#<?php echo $style; ?>">blar</div>
      

      【讨论】:

        【解决方案8】:

        您的简单示例的三元运算符。

          $color = ($var < 6) ? '#FF8000' :  (($var < 10) ? '#00FF00' : '#FF0000');
        

        【讨论】:

          【解决方案9】:

          我会使用 CSS 类而不是内联样式颜色...让 CSS 工作...

          <?php
          $var = 5;
          $class = (($var < 6) ? 'greenclass' : (($var < 11) ? 'orangeclass' : 'redclass' ))
          ?>
          <span class="<?php echo $class?>">text</div>
          

          如果这些答案都不是您所期望的,那么您到底想完成什么?你能提供更多信息吗?

          【讨论】:

            【解决方案10】:
            【解决方案11】:

            假设一个使用范围比这更灵活:

            function getProperColor($range, $value)
            {
                foreach($range as $key => $color)
                {
                    if ($value <= $key)
                        return $color;
                }
                return $color;
            }
            
            $colorRange = array(
                5 => 'green',
                10 => 'orange',
                11 => 'red'
            );
            
            for($i=-1;$i<16;$i+=2)
            {
                echo "$i:" . getProperColor($colorRange, $i) . "\n";
            }
            

            这将输出:

            -1:green
            1:green
            3:green
            5:green
            7:orange
            9:orange
            11:red
            13:red
            15:red
            

            【讨论】:

            • 凯文,我找到了这篇文章,所以其他人也可以。所有的建议都是关于使用 if 语句。以为我会使用范围共享,从而将数据与逻辑分开。是
            【解决方案12】:
            <?php
            $var='2';
            ?>
             <html>
              <body>
               <p>Hello Welcome.I am
                 <?php 
                  if($var>0 && $var<=5)
                    echo '<p style=color:Green;>';
                  else if($var>=6 && $var<= 10)
                    echo '<p style=color:orange;>';
                  else
                     echo '<p style=color:red;>';
            ?>
                    I am a Developer.
                 </p>
                 </body>
            

            【讨论】:

              【解决方案13】:

              为什么不用开关盒?这样会更干净

                 $color = "";
                 switch(true){
                    case ($var > 0 && $var <= 5):
                          $color = '#00FF00';
                    break;
                    case ($var >= 6 && $var <= 10):
                          $color = '#00FF00';
                    break;
                    case ($var >= 11):
                          $color = '#00FF00';
                    break;
                    default:
                          $color = '#000000';
              

              【讨论】:

              • 可能……很难说我 8 年前的想法了。
              • 只是我看到这篇文章时的一个想法,也许它会帮助一些来到这个页面的人(就像我昨天所做的那样:))
              【解决方案14】:
              $color="green";
              $text="foo";
              echo wrapColor($color, $text);
              
              function wrapColor($color, $text){
              return "<span style=color:$color>$text</span>";
              }
              

              【讨论】:

              • 这个例子并没有真正解决@Kevin Brown 的问题;它总是会打印出&lt;span style=color:green&gt;foo&lt;/span&gt;(这不是他想要的)
              猜你喜欢
              • 2021-09-14
              • 2014-07-16
              • 2016-06-02
              • 1970-01-01
              • 2017-03-09
              • 2021-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多