2011-06-20 1 views
0

私は毎月の日をwhileループの中に書き込む、PHPで書かれたhtmlカレンダーに取り組んでいます。HTML whileループのPHP whileループ:各Whileループ反復で配列値をチェックするか、またはポストループ文字列処理を使用する必要がありますか?

月のそれぞれの日には、タグのペア内で、特定の日には、タグ内のtitle属性を必要としています。これらの日はMySQLデータベースから取得され、$ array($ day_number => $ quantity)のような配列に格納されます。

例アレイは次のようになります(=> 4 3 => 5、12 => 4、15 => 6、22 => 10、27 => 2、31)。配列には、数量がゼロでない日のキーしか含まれません。

私はこれを行うには2つの方法が考えられます。どちらがより効率的か、別の方法があるかどうか、私は思っています。

オプション1)は、対応する日含んでいるかどうかを確認するために、HTML作成ループの各反復で配列を確認してください。その場合は、適切なtitle属性をタグに追加します。

$day = 1; 
while($day < 31) { 
if(array_key_exists($day,$array)) { 
echo "<td title=\"$array['$day'] spots available\">$day</td>"; 
} 
else echo "<td title\"No spots available for this date\">$day</td>"; 
$day++; 
} 

2)その後、特殊なタイトル属性を挿入する文字列関数を使用して、文字列変数にカレンダー全体を置くためにループを使用します。だから私はのようなものを使用しています。

$day = 1; 
while($day < 31) { 
$month .= "<td>$day</td>"; 
$day++; 
} 
foreach($array as $day_number=>$quantity) { 
$month = str_replace("<td>$day_number</td>","<td title=\"$quantity spots available\">$day_number</td>",$month) 
} 

このアプリケーションでは、いずれの方法も非常に迅速に行われますが、私の質問はより一般的です。基本的なHTMLを作成するループの後に文字列関数を使用する方が良いか、各繰り返しでチェック/処理する方が良いでしょうか?または、3番目に、最良の方法はありますか?

私は私のコーディングがいかに悪い見当がつかないので、私は完全にインターネットリソースを使って自分でPHPを学んできました。どんな助けもありがとうございます。

ありがとうございます。

$day = 1; 
$strings = array(); 
while($day < 31) { 
    if (array_key_exists($day, $array)) { 
     $strings[$day] = $array['$day'] . " spots available"; 
    } else { 
     $strings[$day] = "No spots available for this date"; 
    } 
    $day += 1; 
} 
foreach ($strings as $day => $string) { 
    echo '<td title="' . $string . '">' . $day . '</td>'; 
} 

それについてとても異なっているもの:

答えて

1

ここでもう一つの解決策ですか?さて、私は31回、2回ループしているので、あなたのソリューションよりも遅くなる可能性があります。しかし、この例はパフォーマンスがあなたの主な関心事ではないということはとても些細なことです。 あなたの主な関心事は誰でも簡単に理解できるコードを書いていることです。

多くのHTML印刷が行われていると、PHPコードが非常に複雑になります。一般的には、すべてのデータを収集し、最後のステップとしてHTMLにのみ印刷する、何らかの種類のモデル(随時または体系的)を作成することです。

データ収集とモデル生成のステップをHTML印刷ステップから分離する方法を学びます。これは過度のCPU消費とメモリの浪費と思われるかもしれませんが、より高価なのはあなたの時間と健全さです。 ;)利用可能スポットを持っている唯一の日のまばらな配列を持っている


あなたの選択は、すでに最適化です。 早熟最適化はすべての悪の母親ですです。あなたの問題を解決する最も簡単な方法を考えて、それを構築してください。とにかく十分に速くなるでしょう。

+0

あなたの答えをありがとう。私は最適化についてはあまりにも難しく、優雅についてはあまり考えすぎていました。 私はいくつかのプログラミング作家のパフォーマンスの細部への奇妙な強調に追いついているようです。そして、100%効率の良いコードを書いても、それでも5ミリ秒で実行すると、私はまだ驚いています。私はあなたがそこで2つのプロセスを分けたのが好きですが、可能な限り多くのプロセスを組み合わせようと私の脳を悩ます傾向がありました。 あなたのアドバイスありがとう!私はそれを使用します。 –