2016-05-23 5 views
1

whileループで行の色を交互に変更しようとしています。なぜこのコードがうまくいかないのか分かりません。それは最初の行を黒色にし、他のすべてを白色として表示します。 (コーディングがちょっと嘘つきで、私が物事を作るときに勉強しようとしているのを知っています)なぜそれがうまくいかないのかについての説明は大変ありがたいです。ありがとう。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文で割り当てをやっているということです。

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

問題があれば条件です:あなたはこれであなたのIF/ELSEIFを交換してみてください

=)の代わりに割り当ての比較演算子(==)を使用する必要があります。等価演算子(==)の代わりに代入演算子(=)を使用しているため、最初の条件は常に真と評価されます。仕事に

、コードを読み取る必要がある:

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%)に依存し、除算の残りの部分を返します。これは、周期的な操作(交互の色のようなもの)にしばしば便利です。

1つの方法はternary operatorです。 $rows++ % 2は、1または0のいずれかと評価されます。これにより、3進演算子は'white'または'black'のいずれかになります。

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

もう1つの方法は、行番号を配列インデックスとして使用することです。

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

ここで、$rows++ % 2の値は、配列インデックスとして使用されます。 ['black','white'][$rows++ % 2]は以前のバージョンでは不可能だった配列リテラルを逆参照しているため、これにはPHP> = 5.5が必要です。以前のバージョンでもこの方法を使用できます。別のステートメント($colors = array('black', 'white'); $bgcolor = $colors[$rows++ % 2];)で配列を定義するだけで済みます。

あなたは例えば、二つ以上の色の間でサイクルする場合は、この方法が便利です。

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

ありがとうございます。私もその方法をテストします。私はPHP 5.6で動作するはずです。 – Viz

関連する問題