2016-05-23 81 views
1

我想在while循环中交替行颜色。我不知道为什么这个代码不工作。它只是将第一行显示为黑色,将所有其他显示为白色。 (我知道编码有点蹩脚,试图学习,因为我建立的东西)任何解释为什么它不工作,非常感谢。谢谢。PHP,while循环中的交替表行颜色

echo "<table border=1>"; 

$rows="0"; 
$bgcolor="black"; 

while($rows < 10) { 
    echo "<tr bgcolor=$bgcolor><td width=100> test </td> </tr>"; 
    $rows++; 

    if ($bgcolor="black") $bgcolor="white"; 
    elseif ($bgcolor="white") $bgcolor="black"; 

} 

echo"</table>"; 
+0

这是切你的问题,但'border'和'bgcolor'属性已被取消,你应该改用这种样式的CSS属性。 –

回答

0

的问题是,你做你的if报表分配。您需要使用比较操作符(==),而不是分配(=

尝试更换你的,如果/ ELSEIF本:

if ($bgcolor=="black") $bgcolor="white"; 
elseif ($bgcolor=="white") $bgcolor="black"; 
1

的问题是如果条件。您正在使用赋值运算符(=)而不是等号运算符(==),因此第一个条件始终计算结果为true。

工作,代码需要阅读:

if ($bgcolor=="black") $bgcolor="white"; 
elseif ($bgcolor=="white") $bgcolor="black"; 

http://php.net/manual/en/language.operators.comparison.php

0

简单的方法:

<style> 
tr:nth-child(even) {background: #CCC} 
tr:nth-child(odd) {background: #FFF} 
</style> 
<? 
$rows="0"; 
echo "<table border=1>"; 
while($rows < 10) { 
echo "<tr><td width='100px'>test</td></tr>"; 
$rows++; 
} 
echo"</table>"; 
+0

谢谢。我会看看我是否可以应用它。 – Viz

0

你已经有一个很好的答案,说明您遇到的问题,但如果你感兴趣的话,这里有几种更加简洁的方式来设置PHP的交替颜色。两者都取决于modulus operator%),它返回一个分区的其余部分。这对循环操作(例如交替颜色)通常很有用。

一种方法是使用ternary operator$rows++ % 2将评估为10,这将导致三元运算符产生'white''black'

$rows = 0; 
while ($rows < 10) { 
    $bgcolor = $rows++ % 2 ? 'white' : 'black'; 
    echo "<tr bgcolor=$bgcolor><td width=100> test </td></tr>"; 
} 

另一种方法是使用行号作为数组索引。

$rows = 0; 
while ($rows < 10) { 
    $bgcolor = ['black','white'][$rows++ % 2]; 
    echo "<tr bgcolor=$bgcolor><td width=100> test </td></tr>"; 
} 

这里,值$rows++ % 2被用作数组索引。这要求PHP> = 5.5,因为['black','white'][$rows++ % 2]正在取消引用数组文本,这在早期版本中是不可行的。您仍然可以在早期版本中使用此方法;您只需要在单独的语句($colors = array('black', 'white'); $bgcolor = $colors[$rows++ % 2];)中定义数组。

,如果你想循环两种以上的颜色之间,例如,这种方法可能是有用的:

$bgcolor = ['black','white','red'][$rows++ % 3]; 
+0

谢谢。我也会测试这些方法。我在PHP 5.6,所以它应该工作。 – Viz