PHP:根据 $value 更改文本的颜色
Posted
技术标签:
【中文标题】PHP:根据 $value 更改文本的颜色【英文标题】:PHP: Change color of text based on $value 【发布时间】:2011-02-17 18:02:47 【问题描述】:根据变量更改文本颜色的最简单方法是什么?
例如:如果 $var 介于 1-5 之间,则为绿色。 6-10 之间,橙色。大于 11,红色。
【问题讨论】:
有趣的是,当答案如此相似时!我刚刚注意到我的和 sshow 的(除了功能部分和橙色十六进制)完全相同:) @Kevin,这个问题变成了一场噩梦。我正在对所有不符合您的规则的人投反对票,但在一天结束时,您应该编辑您的问题或承认大多数答案都是错误的——包括绿色勾号的答案。只是为了让您(和其他人)理解“大于 11”与“大于或等于 11”不同。由于其他明显的原因,一些答案是错误的。但是,嘿,这是一个公共问答网站,我们应该期待这种行为。 @Zaf,我意识到从技术上讲,他们错了,因为 >= 11。但事实仍然是他们回答了我的问题(这是以“?”结尾的行)。我的例子只是为了提供更多细节并促进适用于我情况的答案。 sshow 回答得很好,你只是嫉妒。 @Kevin 一点也不嫉妒 sshow,如果我是他,我会改变他的答案,否则这不是一个很好的记录。我嫉妒你的金徽章;) 我愿意用我的金徽章换取你的知识! :) 【参考方案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】:我找到了这个插件:
http://www.jnathanson.com/blog/client/jquery/heatcolor/index.cfm#examples
【讨论】:
【参考方案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 的问题;它总是会打印出<span style=color:green>foo</span>
(这不是他想要的)以上是关于PHP:根据 $value 更改文本的颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何根据Angularjs中的背景颜色自动更改文本颜色? [复制]