1

我正在尝试根据循环中的颜色代码来回显 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>";
4

4 回答 4

7

原因是你搞混===

if ($Monday = "#F00") {

应该

if ($Monday == "#F00") {

为了防止将来发生这种情况,许多人这样做。

if ("#F00" == $Monday) {

一开始可能看起来很尴尬,但它可以防止你把它们混淆起来,就好像你把你的陈述打错了一样

if ("#F00" = $Monday) {

您的解释器将因致命错误而死,抱怨您无法分配常量,诸如此类 - 这实际上使您的错误更加明显。

顺便说一句,#FF0是黄色和#0D0绿色,看起来你也交换了文本。

于 2012-11-11T02:15:09.270 回答
2

你混淆了equality==和assignment =。当测试两个或值的相等性时,你用两个来做==(除非你也在测试类型,在这种情况下你会使用===)。此外,如果您使用初始数组作为书面颜色名称的查找,您的代码可以简化:

$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)“未知”将被替换。

三元运算符的这种特殊用法需要 PHP 5.3+ 版本。

于 2012-11-11T02:26:27.347 回答
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>";
}
?>
于 2012-11-11T02:31:19.240 回答
1

检查您的条件 - 您需要使用 == 来测试是否相等。目前,您的条件正在分配值,因此第一个条件将始终评估为真。

试试这个:

if ($Monday == "#F00") {
    echo "Red";
}
elseif ($Monday == "#FF0") {
    echo "Green";
}
elseif ($Monday == "#0D0") 
{
    echo "Yellow";
}
于 2012-11-11T02:17:30.523 回答