0

我认为这可能真的很简单,但我必须忽略一些东西。

基本上,我有 If/Else php 语句,用于检查条件是否为真。在这些 if 语句中的每一个中,都有一个 WHILE 循环,它从我的数据库中回显所有适当的行。

while 循环需要打印一些表格单元格和行中的字段。目前,每个 WHILE 循环都有手动输入的代码,这意味着如果我想更改布局或其他内容,我需要在每个 while 循环中更改它。

我想做的是定义一个可以回显的变量,这样我只需要在一个地方更改代码就可以影响所有的 WHILE 循环。但是,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>";
                }

这是一个 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 变量,然后回显,

终极成就:

我可以在一处更改事件信息的布局,所有循环都会收到这些更改。

非常感谢大家的帮助和建议

编辑

于 2012-09-04T15:29:49.660 回答