2012-03-07 2 views
0

私はテーブルを作っています。10スキームのグループから無作為に選択した4色スキームを使いたいと思います。ここで書く変数をキャストする

は私のCSS/PHPです:

<?php header('Content-type: text/css'); 

// 0 grey 
$color00 = '#959595';  //light grey 
$color10 = '#616161';  //medium grey 
$color20 = '#414141';  //dark grey 
$color30 = '#dfdfdf';  //white grey 
// 1 pink 
$color01 = '#e45494';  //light pink 
$color11 = '#d70060';  //medium pink 
$color21 = '#900040';  //dark pink 
$color31 = '#f7ccdf';  //white pink 
// 2 red 
$color02 = '#ee576f';  //light red 
$color12 = '#e50428';  //medium red 
$color22 = '#9a031b';  //dark red 
$color32 = '#facdd4';  //white red 
// 3 orange 
//(etc, up to 09-39) 

$seed = rand(0,9); 

$lightcolor = "color0".$seed; 
$medcolor = "color1".$seed; 
$darkcolor = "color2".$seed; 
$whitecolor = "color3".$seed; 

?> 


#wttbl{ 
border:0; 
border-collapse:collapse; 
cellpadding:3; 
width:500px; 
font-family:Verdana; 
font-size:9px; 
} 

#wttbl td, #wttbl th{ 
padding: 4px; 
} 

#wttbl #header{ 
background:<?="$lightcolor"?>; 
} 

#wttbl td{ 
text-align:right; 
color:#414141; 
} 

#wttbl .odd{ 
background:<?="$color33"?>; 
} 

#wttbl .even{ 

} 

#wttbl tr:hover{ 
background:<?="$color03"?>; 
} 

#wttbl td:hover{ 
background:<?="$color23"?>; 
color:white;  
} 

問題が

のようなものながら

#wttbl .odd{ background:<?="$color33"?>; } 

のようなハードコーディングする事は、動作するようには思え、そして私のコードに適切なCSSの色をエコー、ということです

#wttbl #header{ background:<?="$lightcolor"?>; } 

エコー「color03」をタグに入れます。

私は間違っていますが、どうすれば修正できますか?

+0

あなたは配列が欠落しています...同様に、はるかに効率的ではなく明確な '<?=" $ something "?>' ...の代わりに '<?= $ something?ランダムに色分けされたCSSを生成するためにPHPを使用するアイデア。 – Ryan

答えて

2

あなたは、その名前を構成する文字列で変数を参照する{}内の文字列を囲むことができます。

$lightcolor = ${"color0".$seed}; 
$medcolor = ${"color1".$seed}; 
$darkcolor = ${"color2".$seed}; 
$whitecolor = ${"color3".$seed}; 

echo $lightcolor; 
// #959595 

しかしこれは、最良の方法のように見えるしていません。それらを配列に格納する方が適切です。ビルド変数名(variable variables in PHPと呼ばれる)は、特にグローバル名前空間では、デバッグが困難になる傾向があります。どの変数が定義されているか、または定義されている変数の数を把握するのが難しくなります。

+0

可変変数はひどい考えです – Cfreak

+0

+1これはそれを行う方法を示しているからです。 – mc10

+0

@Cfreak彼らは確かです。 –

5

あなたは配列を使用する必要があります。

$color = array(
    array('#959595', '#616161', ...), 
    array('#e45494', '#d70060', ...) 
); 

$lightcolor = $color[$seed][0]; 

そして、いや、変数の変数がそれらを言及するいくつかの答えがあるでしょうにもかかわらず、良いアイデアになることはありません。

+0

同意。可変変数はデバッグでは直感的ではなく、配列がはるかに単純な場合に問題に複雑さを追加します。 –

+0

正解の場合は@zerkmsに+1しますが、受け入れられません。 –

+0

@Michael:「具体的には配列を使いたくない」 - 特にこれは私を泣かせる。しかし、私たちが*正しい*答えを与えている限り - 私たちは気にしません、そうですか? ;-) – zerkms

関連する問題