我试图根据循环中的颜色代码回显div的颜色名称,但它似乎不起作用。这就是我得到的:
框的颜色应与其中的文本相关联。有什么我做错了吗?到目前为止,这是我的代码:
$availColour = array("#F00","#FF0","#0D0");
for ($i = 1; $i <= 9; $i++) {
$Monday = $availColour[array_rand($availColour, 1)];
echo '<div class="innerTbl" style="width: 50px; float: left;
background-color: '.$Monday.'">';
if ($Monday = "#F00") {
echo "Red";
}
elseif ($Monday = "#FF0") {
echo "Green";
}
elseif ($Monday = "#0D0") {
echo "Yellow";
}
echo "</div>";
答案 0 :(得分:7)
原因是你混淆了=
和==
。
if ($Monday = "#F00") {
应该是
if ($Monday == "#F00") {
为了防止将来发生这种情况,很多人会这样做。
if ("#F00" == $Monday) {
一开始可能看起来很尴尬,但它可以防止你混淆它们,好像你把你的陈述输错了
if ("#F00" = $Monday) {
你的口译员会因致命的错误而死,抱怨你不能分配一个常数,就像那样 - 这实际上会让你的错误更加明显。
btw,#FF0
为黄色,#0D0
为绿色,看起来你也交换了文字。
答案 1 :(得分:2)
您对平等==
和作业=
感到困惑。在测试两个或两个值的相等性时,您需要使用两个==
(除非您正在测试类型,在这种情况下您将使用===
)。此外,如果使用初始数组作为查找书写颜色名称,则可以简化代码:
$i = 9;
$c = array(
"Red" => "#F00",
"Green" => "#FF0",
"#0D0"
);
while ( $i-- ) {
$hex = $c[ array_rand( $c ) ];
$str = array_search( $hex, $c ) ?: "Unknown" ;
echo "<div style='background-color:{$hex}'>{$str}</div>";
}
上面将使用CSS中的十六进制值,以及(如果存在)div
本身内的可读字符串。如果没有提供字符串(#0D0
就是这种情况),“Unknown”将被替换。
三元运算符的这种特殊用法需要PHP版本5.3 +。
答案 2 :(得分:2)
您使用的是分配=
而不是比较==
所以改变
if ($Monday = "#F00")
到
if ($Monday == "#F00")
并且实现这一目标的更好方法是根本不使用比较。
<?php
$availColour = array("#F00"=>"Red","#FF0"=>"Green","#0D0"=>"Yellow");
for ($i = 1; $i <= 9; $i++) {
#get a random (key from the array);
$key = array_rand($availColour, 1);
echo '<div class="innerTbl" style="width: 50px; float: left;
background-color: '.$key.';">';
#directly print out the value of the selected $key
echo $availColour[$key];
echo "</div>";
}
?>
答案 3 :(得分:1)
检查您的条件 - 您需要使用==来测试相等性。目前,您的条件是分配值,因此第一个条件将始终评估为真。
试试这个:
if ($Monday == "#F00") {
echo "Red";
}
elseif ($Monday == "#FF0") {
echo "Green";
}
elseif ($Monday == "#0D0")
{
echo "Yellow";
}