0

これはおそらく本当に簡単なことだと思いますが、何かを見落としているに違いありません。

基本的に、条件が true かどうかを確認する If/Else php ステートメントがあります。これらの各 if ステートメント内には、データベースから適切なすべての行をエコーする WHILE ループがあります。

while ループでは、いくつかのテーブル セルと行のフィールドを出力する必要があります。現時点では、各 WHILE ループには手動で入力されたコードがあります。つまり、レイアウトなどを変更したい場合は、各 while ループ内でコードを変更する必要があります。

私がやりたいことは、エコーできる変数を定義することです。これにより、すべての WHILE ループに影響を与えるコードを 1 か所で変更するだけで済みます。ただし、WHILE ループ内のコンテンツの性質上、これは機能しません。その理由は次のとおりです。

                //If the date is a monday
                if($daycheck == "Monday") {
                    //Start a row and create cell with date in
                    echo "<tr><td height='100px' valign='top'>".$datedisplay."<br />";

                    //For each event found for this day
                    while($dayrow = mysql_fetch_assoc($dayresult)) {
                        //Show the event info
                        echo $dayrow['Event Time']."<br />".$dayrow['Event Name']."<br />";
                    }

                    //End the cell for the day
                    echo "</td>";
                }

これは 1 つの IF ステートメントですが、その下にさらにいくつかのステートメントがあると想像してください。真ん中にあるのが WHILE ループで、データベースの各行のフィールドが表示されています。

問題は、私が固執した場合:

$dayrow['Event Time']."<br />".$dayrow['Event Name']."<br />";

while ループの前に変数に入力し、エコー アウトすると、$dayrow の部分が更新されないため、毎回同じになります。

上記を変数に入れて、WHILE ループが実行されるたびに更新されるようにする方法はありますか?

おそらく、$dayrow[''] の部分が変数ではなくテキストとして保存されていたらどうでしょうか?

ご協力いただきありがとうございます。

エズ

4

4 に答える 4

1

DaveRandom が提案したようにsprintf()、または (よりファンシーでより多くの可能性) を使用してテンプレート システムを使用できeval()ます。

于 2012-09-04T10:56:43.227 に答える
0

あなたの質問について私が理解したことは簡単です。ループの各反復で変数を更新したくないが、前のデータを追加したい、それは簡単です

           $data="";
             if($daycheck == "Monday") {
                $data .= "<tr><td height='100px' valign='top'>".$datedisplay."<br />";
                 while($dayrow = mysql_fetch_assoc($dayresult)) {
                    $data .= $dayrow['Event Time']."<br />".$dayrow['Event Name']."<br />";
                }
                $data .= "</td>";
                echo $data;
            };

`

于 2012-09-04T10:47:00.293 に答える
0

コードと視覚的表現を混在させるのではなく、適切なテンプレート システムを探して使用することをお勧めします。

例: http://twig.sensiolabs.org/

于 2012-09-04T10:51:13.060 に答える
0

だから、私が必要なことをする sprintf() を使って私がやったことは次のとおりです。

表示方法を設定します。

                //Set the format to display the event details
                $eventdisplay = "%s <br /> %s <br /><br />";

各 WHILE ループ内で時間と名前の変数を設定します。

                        //Set the event time variable
                        $eventtime = $dayrow['Event Time'];
                        //Set the event name variable
                        $eventname = $dayrow['Event Name'];

最後に、WHILE ループでエコーします。

                        //Print event details into preset format
                        echo sprintf($eventdisplay, $eventtime, $eventname);

つまり、ドキュメント内の任意の場所に $eventdisplay を設定すると、各ループ内で正しい時刻と名前が設定されます。これらは、sprintf() を使用して $eventdisplay 変数にフォーマットされ、エコーアウトされます。

究極の成果:

イベント情報のレイアウトを 1 か所で変更でき、すべてのループがそれらの変更を受け取ります。

みんなの助けと提案に感謝します

エズ

于 2012-09-04T15:29:49.660 に答える